Здається, відповідь "ні" ... і "так". Здається, немає реального способу дізнатися, чи відкритий файл для запису іншою програмою. Отже, читання з такого файлу буде просто прогресувати, поки вміст не вичерпається. Я скористався порадою Майка і написав тестовий код:
Writer.java записує рядок у файл, а потім чекає, коли користувач натисне клавішу Enter, перш ніж записати інший рядок у файл. Ідея полягає в тому, що його можна запустити, тоді читач може запустити, щоб побачити, як він справляється з "частковим" файлом. Читач, про якого я писав, знаходиться у 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();
}
}
Читач.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);
}
}
Ніяких гарантій, що цей код є найкращою практикою.
Це залишає можливість, запропоновану Майком, періодично перевіряти, чи є нові дані для зчитування з файлу. Потім для втручання користувача потрібно закрити програму зчитування файлів, коли буде визначено, що зчитування завершено. Або читач повинен бути поінформований про вміст файлу та мати можливість визначати та закінчувати стан запису. Якщо вміст був XML, кінець документа може бути використаний для сигналізації про це.