La réponse semble être "non" ... et "oui". Il ne semble y avoir aucun moyen réel de savoir si un fichier est ouvert à l'écriture par une autre application. Ainsi, la lecture d'un tel fichier progressera jusqu'à ce que le contenu soit épuisé. J'ai suivi les conseils de Mike et j'ai écrit du code de test:
Writer.java écrit une chaîne dans le fichier, puis attend que l'utilisateur appuie sur Entrée avant d'écrire une autre ligne dans le fichier. L'idée étant qu'il puisse être démarré, alors un lecteur peut être démarré pour voir comment il gère le fichier "partiel". Le lecteur que j'ai écrit est dans Reader.java.
Writer.java
public class Writer extends Object
{
Writer () {
}
public static String[] strings =
{
"Hello World",
"Goodbye World"
};
public static void main(String[] args)
throws java.io.IOException {
java.io.PrintWriter pw =
new java.io.PrintWriter(new java.io.FileOutputStream("out.txt"), true);
for(String s : strings) {
pw.println(s);
System.in.read();
}
pw.close();
}
}
Reader.java
public class Reader extends Object
{
Reader () {
}
public static void main(String[] args)
throws Exception {
java.io.FileInputStream in = new java.io.FileInputStream("out.txt");
java.nio.channels.FileChannel fc = in.getChannel();
java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10);
while(fc.read(bb) >= 0) {
bb.flip();
while(bb.hasRemaining()) {
System.out.println((char)bb.get());
}
bb.clear();
}
System.exit(0);
}
}
Aucune garantie que ce code est la meilleure pratique.
Cela laisse l'option suggérée par Mike de vérifier périodiquement s'il y a de nouvelles données à lire à partir du fichier. Cela nécessite alors une intervention de l'utilisateur pour fermer le lecteur de fichiers lorsqu'il est déterminé que la lecture est terminée. Ou bien, le lecteur doit être informé du contenu du fichier et être en mesure de déterminer la condition de fin d'écriture. Si le contenu était XML, la fin du document pourrait être utilisée pour le signaler.