Часто бывает так, что один и тот же файл обрабатывается несколькими программами, например, одновременно обновляя или читая файл. Такие вопросы следует решать, иначе может наступить хаос. После JDK 1.4 Java предоставляет функцию блокировки файлов , которая может помочь решить такие проблемы.
Классы FileLock и FileChannel находятся в пакетах java.nio и java.nio.channels соответственно. Блокировки файлов можно использовать, когда потоки ввода и вывода читают и записывают файлы. Ниже используется класс RandomAccessFile для иллюстрации использования блокировок файлов.
Поток, созданный RandomAccessFile, может использовать блокировки файлов при чтении и записи файлов. Пока блокировка не снята, другие программы не могут работать с заблокированным файлом.
Шаги по использованию блокировки файлов следующие:
1) Сначала используйте поток RandomAccessFile для создания объекта потока, указывающего на файл. Атрибут чтения-записи объекта должен быть rw, например:
RandomAccessFileinput=newRandomAccessFile(Main.java,rw);
2) Входной поток вызывает метод getChannel() для получения объекта FileChannel (канала), подключенного к базовому файлу, например:
FileChannelchannel=input.getChannel();
3) Канал вызывает метод tryLock() или lock() для получения объекта FileLock (блокировка файла). Этот процесс также называется блокировкой файла, например:
FileLocklock=channel.tryLock();
После создания объекта блокировки файла любой программе будет запрещено работать с файлом или блокировать его. После блокировки файла, если вы хотите прочитать или записать его, вы должны позволить объекту FileLock вызвать Release(), чтобы снять блокировку файла, например:
блокировка.выпуск();
Например, программа Java снимает блокировку файла при каждом нажатии кнопки, считывает строку текста из файла, а затем немедленно блокирует его. Когда запущена программа Java, пользователи не могут использовать другие программы для работы с файлами, заблокированными текущей программой Java. Например, пользователи не могут сохранять файлы, заблокированные текущей программой Java, с помощью программы «Блокнот» (Notepad.exe), предоставляемой Windows. Операционная система. .
Main.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(Main.java);WindowFileLockwin=newWindowFileLock(файл);win.setTitle(использовать блокировку файла);}}
ОкноФайлЛокк.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(прочитать строку);button.addActionListener(this);add(newJScrollPane(text),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(Exceptionee){}}}