Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

détécter l'ouverture et la fermeture d'un fichier

3 réponses
Avatar
Antonhino
Bonjour,

j'utilise la biblioth=E9que JDIC pour ouvrir des fichiers. Je
souhaiterais savoir s'il existe une m=E9thode permettant de savoir si le
fichier est ouvert ou non pour afficher son =E9tat dans mon appli.

Merci

3 réponses

Avatar
alexandre cartapanis
Bonjour,

j'utilise la bibliothéque JDIC pour ouvrir des fichiers. Je
souhaiterais savoir s'il existe une méthode permettant de savoir si l e
fichier est ouvert ou non pour afficher son état dans mon appli.

Merci




C'est possible en utilisant le package java.nio
En gros:

<code>

File f = new File("/chemin/vers/fichier");
FileChannel channel = new FileInputStream(f).getChannel();

// ou
// FileChannel channel = new FileOutputStream(f).getChannel();
// FileChannel channel = new RandomAccessFile(f, "rw").getChannel();

FileLock lock = channel.lock();// pour obtenir un verrou sur le fichier

boolean locked = (channel.tryLock() == null);// pour savoir si le
fichier est verrouillé

</code>

L'idée ici est de vérifier si l'on peut obtenir un verrou. Si on ne p eut
pas, c'est que le fichier est verrouillé, donc déjà utilisé.

Attention, je n'ai jamais testé ce code. Il est possible que les verrou s
soient limité a Java (si un programme acquiert un verrou, peut être q ue
java ne le saura pas). A tester, mais je pense que ça marchera.

Maintenant, certain fichier peuvent être ouvert, et pas verrouillé. C ela
dépend de l'outil utilisé, et aussi de l'OS.

A toi de faire des tests...

--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email

Avatar
Syrion


Bonjour,

j'utilise la bibliothéque JDIC pour ouvrir des fichiers. Je
souhaiterais savoir s'il existe une méthode permettant de savoir si le
fichier est ouvert ou non pour afficher son état dans mon appli.

Merci




C'est possible en utilisant le package java.nio
En gros:

<code>

File f = new File("/chemin/vers/fichier");
FileChannel channel = new FileInputStream(f).getChannel();

// ou
// FileChannel channel = new FileOutputStream(f).getChannel();
// FileChannel channel = new RandomAccessFile(f, "rw").getChannel();

FileLock lock = channel.lock();// pour obtenir un verrou sur le fichier

boolean locked = (channel.tryLock() == null);// pour savoir si le
fichier est verrouillé

</code>

L'idée ici est de vérifier si l'on peut obtenir un verrou. Si on ne peut
pas, c'est que le fichier est verrouillé, donc déjà utilisé.

Attention, je n'ai jamais testé ce code. Il est possible que les verrous
soient limité a Java (si un programme acquiert un verrou, peut être que
java ne le saura pas). A tester, mais je pense que ça marchera.

Maintenant, certain fichier peuvent être ouvert, et pas verrouillé. Cela
dépend de l'outil utilisé, et aussi de l'OS.

A toi de faire des tests...

D'après la javadoc, on peut demander une lock EXCLUSIF, la JVM lockant

au niveau système pour garantir l'exclusivité même entre Java et un
autre programme. On peut demander un lock PARTAGE, ce qui autorise
d'autres programme à récupérer ce lock partagé sur le fichier.
Cf lka javadoc de l'objet java.nio.channels.FileLock qui explique ça.


Avatar
Syrion
Précision Javadoc:
" Platform dependencies

This file-locking API is intended to map directly to the native locking
facility of the underlying operating system. Thus the locks held on a
file should be visible to all programs that have access to the file,
regardless of the language in which those programs are written. "

Donc pas de pb !