我想用Java读取一个文本文件。完成后,一些文本将被另一个应用程序附加,然后我想阅读它。可以说有十行。当另一个应用程序追加一行时,我不想再读取整个文件;只是新的一行。我怎么能这样做?
答案 0 :(得分:2)
这样的事情可行:
BufferedReader reader = .. // create a reader on the input file without locking it
while(otherAppWritesToFile) {
String line = reader.readLine();
while(line != null) {
processLine(line);
line = reader.readLine();
}
Thread.sleep(100);
}
为简单起见,省略了异常处理。
答案 1 :(得分:1)
获得EOF指示后,请稍等一下,然后再次尝试阅读。
编辑:这是支持此解决方案的代码。您可以尝试它,然后根据需要更改控制流机制。
public static void main(final String[] args) throws IOException {
final Scanner keyboard = new Scanner(System.in);
final BufferedReader input = new BufferedReader(new FileReader("input.txt"));
boolean cont = true;
while (cont) {
String line = input.readLine();
while (line != null) {
System.out.println(line);
line = input.readLine();
}
System.out.println("EOF reached, add more input and type 'y' to continue.");
final String in = keyboard.nextLine();
cont = in.equalsIgnoreCase("y");
}
}
编辑:感谢您添加一些代码Tim。就个人而言,我只是睡觉而不是等待用户输入。这将更符合用户的要求。
答案 2 :(得分:0)
您可以尝试使用RandomAccessFile。
打开文件,然后调用length()以获取文件的长度。然后,您可以使用readLine()方法获取数据。然后,下次打开文件时,可以使用seek()方法将自己定位到文件的上一端。然后读取行并保存文件的新长度。