A menudo ocurre que varios programas procesan el mismo archivo, como actualizar o leer el archivo al mismo tiempo. Estas cuestiones deben abordarse, de lo contrario puede sobrevenir el caos. Después de JDK 1.4, Java proporciona una función de bloqueo de archivos que puede ayudar a resolver este tipo de problemas.
Las clases FileLock y FileChannel están en los paquetes java.nio y java.nio.channels respectivamente. Los bloqueos de archivos se pueden utilizar cuando los flujos de entrada y salida leen y escriben archivos. A continuación se utiliza la clase RandomAccessFile para ilustrar el uso de bloqueos de archivos.
La secuencia creada por RandomAccessFile puede utilizar bloqueos de archivos al leer y escribir archivos. Mientras no se libere el bloqueo, otros programas no pueden operar el archivo bloqueado.
Los pasos para utilizar el bloqueo de archivos son los siguientes:
1) Primero use la secuencia RandomAccessFile para crear un objeto de secuencia que apunte al archivo. El atributo de lectura y escritura del objeto debe ser rw, por ejemplo:
RandomAccessFileinput=newRandomAccessFile(Main.java,rw);
2) El flujo de entrada llama al método getChannel() para obtener un objeto FileChannel (canal) conectado al archivo subyacente, por ejemplo:
FileChannelchannel=input.getChannel();
3) El canal llama al método tryLock() o lock() para obtener un objeto FileLock (bloqueo de archivo). Este proceso también se denomina bloquear el archivo, por ejemplo:
FileLocklock=canal.tryLock();
Una vez generado el objeto de bloqueo de archivo, se prohibirá a cualquier programa operar o bloquear el archivo. Después de bloquear un archivo, si desea leer o escribir el archivo, debe dejar que el objeto FileLock llame a release() para liberar el bloqueo del archivo, por ejemplo:
bloqueo.liberación();
Por ejemplo, un programa Java libera un bloqueo de archivo con cada clic de un botón, lee una línea de texto del archivo y luego lo bloquea inmediatamente. Cuando se ejecuta un programa Java, los usuarios no pueden usar otros programas para operar archivos bloqueados por el programa Java actual. Por ejemplo, los usuarios no pueden guardar archivos bloqueados por el programa Java actual usando el programa "Bloc de notas" (Notepad.exe) proporcionado por Windows. Sistema operativo. .
principal.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(Main.java);WindowFileLockwin=newWindowFileLock(archivo);win.setTitle(usar bloqueo de archivo);}}
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(leer una línea);button.addActionListener(this);add(newJScrollPane(texto),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){}}}