Ответ вроде бы "нет"... и "да". Кажется, нет реального способа узнать, открыт ли файл для записи другим приложением. Таким образом, чтение из такого файла будет продолжаться до тех пор, пока содержимое не будет исчерпано. Я последовал совету Майка и написал тестовый код:
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();
}
}
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);
}
}
Нет гарантий, что этот код является передовой практикой.
Это оставляет предложенный Майком вариант периодической проверки наличия новых данных для чтения из файла. Затем требуется вмешательство пользователя, чтобы закрыть программу чтения файлов, когда будет определено, что чтение завершено. Или читатель должен быть осведомлен о содержимом файла и иметь возможность определить и закончить условие записи. Если бы содержимое было XML, конец документа мог бы использоваться для обозначения этого.
person
Anthony Cramp
schedule
07.08.2008