Die Antwort scheint "nein" ... und "ja" zu sein. Es scheint keine wirkliche Möglichkeit zu geben, festzustellen, ob eine Datei zum Schreiben durch eine andere Anwendung geöffnet ist. Das Lesen aus einer solchen Datei wird also nur fortgesetzt, bis der Inhalt erschöpft ist. Ich nahm Mikes Rat an und schrieb einen Testcode:
Writer.java schreibt eine Zeichenfolge in die Datei und wartet darauf, dass der Benutzer die Eingabetaste drückt, bevor eine weitere Zeile in die Datei geschrieben wird. Die Idee ist, dass es gestartet werden könnte, dann kann ein Leser gestartet werden, um zu sehen, wie es mit der "partiellen" Datei umgeht. Der Reader, den ich geschrieben habe, ist in 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);
}
}
Keine Garantie, dass dieser Code eine bewährte Methode ist.
Dadurch bleibt die von Mike vorgeschlagene Option, regelmäßig zu überprüfen, ob neue Daten aus der Datei gelesen werden müssen. Dies erfordert dann ein Eingreifen des Benutzers, um den Dateireader zu schließen, wenn festgestellt wird, dass das Lesen abgeschlossen ist. Oder der Leser muss auf den Inhalt der Datei aufmerksam gemacht werden und in der Lage sein, den Schreibzustand zu bestimmen und zu beenden. Wenn der Inhalt XML wäre, könnte das Ende des Dokuments verwendet werden, um dies zu signalisieren.