Seringkali beberapa program memproses file yang sama, misalnya memperbarui atau membaca file secara bersamaan. Permasalahan seperti ini harus diselesaikan, jika tidak maka akan terjadi kekacauan. Setelah JDK 1.4, Java menyediakan fungsi kunci file yang dapat membantu mengatasi masalah tersebut.
Kelas FileLock dan FileChannel masing-masing ada dalam paket java.nio dan java.nio.channels. Kunci file dapat digunakan ketika aliran input dan output membaca dan menulis file. Berikut ini penggunaan kelas RandomAccessFile untuk mengilustrasikan penggunaan kunci file.
Aliran yang dibuat oleh RandomAccessFile dapat menggunakan kunci file saat membaca dan menulis file selama kunci tidak dilepaskan, program lain tidak dapat mengoperasikan file yang terkunci.
Langkah-langkah menggunakan kunci file adalah sebagai berikut:
1) Pertama-tama gunakan aliran RandomAccessFile untuk membuat objek aliran yang menunjuk ke file. Atribut baca-tulis objek harus rw, misalnya:
RandomAccessFileinput=newRandomAccessFile(Utama.java,rw);
2) Aliran input memanggil metode getChannel() untuk mendapatkan objek FileChannel (saluran) yang terhubung ke file yang mendasarinya, misalnya:
FileChannelchannel=input.getChannel();
3) Saluran memanggil metode tryLock() atau lock() untuk mendapatkan objek FileLock (penguncian file).
FileLocklock=saluran.tryLock();
Setelah objek kunci file dibuat, program apa pun akan dilarang mengoperasikan atau mengunci file. Setelah mengunci file, jika Anda ingin membaca atau menulis file, Anda harus membiarkan objek FileLock memanggil rilis() untuk melepaskan kunci file, misalnya:
kunci.rilis();
Misalnya, program Java melepaskan kunci file dengan setiap klik tombol, membaca sebaris teks dari file, dan kemudian segera menguncinya. Ketika program Java sedang berjalan, pengguna tidak dapat menggunakan program lain untuk mengoperasikan file yang dikunci oleh program Java saat ini. Misalnya, pengguna tidak dapat menyimpan file yang dikunci oleh program Java saat ini menggunakan program "Notepad" (Notepad.exe) yang disediakan oleh Windows. sistem operasi.
Main.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(Main.java);WindowFileLockwin=newWindowFileLock(file);win.setTitle(gunakan kunci file);}}
WindowFileLock.java
importjava.io.*;importjava.nio.*;importjava.nio.channels.*;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassWindowFileLockextendsJframeimplementsActionListener{JTextAreatext;JButtonbutton;Filefile;RandomAccessFileinput; FileChannelchannel;FileLocklock;WindowFileLock(Filef){file=f;try{input=newRandomAccessFile(file,rw);channel=input.getChannel();lock=channel.tryLock();}catch(Exceptionexp){}text=newJTextArea ();button=newJButton(baca satu baris);button.addActionListener(ini);add(newJScrollPane(teks),BorderLayout.CENTER);add(button,BorderLayout.SOUTH);setSize(300,400);setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){try{lock.release();StringlineString=input.readLine();text.append(n+lineString);lock=channel.tryLock();if(lineString ==null)input.close();}catch(Penerima Pengecualian){}}}