Il arrive souvent que plusieurs programmes traitent le même fichier, par exemple en mettant à jour ou en lisant le fichier en même temps. De telles questions doivent être résolues, sinon le chaos pourrait s’ensuivre. Après JDK 1.4, Java fournit une fonction de verrouillage de fichiers qui peut aider à résoudre de tels problèmes.
Les classes FileLock et FileChannel se trouvent respectivement dans les packages java.nio et java.nio.channels. Les verrous de fichiers peuvent être utilisés lorsque les flux d'entrée et de sortie lisent et écrivent des fichiers. Ce qui suit utilise la classe RandomAccessFile pour illustrer l'utilisation des verrous de fichiers.
Le flux créé par RandomAccessFile peut utiliser des verrous de fichiers lors de la lecture et de l'écriture de fichiers. Tant que le verrou n'est pas libéré, les autres programmes ne peuvent pas exploiter le fichier verrouillé.
Les étapes pour utiliser le verrouillage de fichiers sont les suivantes :
1) Utilisez d'abord le flux RandomAccessFile pour créer un objet flux pointant vers le fichier. L'attribut lecture-écriture de l'objet doit être rw, par exemple :
RandomAccessFileinput=newRandomAccessFile(Main.java,rw);
2) Le flux d'entrée appelle la méthode getChannel() pour obtenir un objet FileChannel (canal) connecté au fichier sous-jacent, par exemple :
FileChannelchannel=input.getChannel();
3) Le canal appelle la méthode tryLock() ou lock() pour obtenir un objet FileLock (file lock). Ce processus est également appelé verrouillage du fichier, par exemple :
FileLocklock=channel.tryLock();
Une fois l'objet de verrouillage de fichier généré, il sera interdit à tout programme d'exploiter ou de verrouiller le fichier. Après avoir verrouillé un fichier, si vous souhaitez lire ou écrire le fichier, vous devez laisser l'objet FileLock appeler release() pour libérer le verrouillage du fichier, par exemple :
lock.release();
Par exemple, un programme Java libère un verrou de fichier à chaque clic sur un bouton, lit une ligne de texte dans le fichier, puis le verrouille immédiatement. Lorsqu'un programme Java est en cours d'exécution, les utilisateurs ne peuvent pas utiliser d'autres programmes pour gérer les fichiers verrouillés par le programme Java actuel. Par exemple, les utilisateurs ne peuvent pas enregistrer les fichiers verrouillés par le programme Java actuel à l'aide du programme « Notepad » (Notepad.exe) fourni par Windows. système opérateur. .
Main.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(Main.java);WindowFileLockwin=newWindowFileLock(file);win.setTitle(utiliser le verrouillage de fichier);}}
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(lire une ligne);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){}}}