Java 如何读取附加到已读取文件末尾的文本?

Java 如何读取附加到已读取文件末尾的文本?,java,text,io,Java,Text,Io,我想用Java读一个文本文件。在我完成之后,一些文本将被另一个应用程序追加,然后我想阅读它。假设有十行。当另一个应用程序追加一行时,我不想再次读取整个文件;只是新的线路。如何执行此操作?一旦获得EOF指示,请稍等片刻,然后再次尝试读取 编辑:以下是支持此解决方案的codez。您可以尝试一下,然后根据需要更改控制流机制 public static void main(final String[] args) throws IOException { final Scanner keyboa

我想用Java读一个文本文件。在我完成之后,一些文本将被另一个应用程序追加,然后我想阅读它。假设有十行。当另一个应用程序追加一行时,我不想再次读取整个文件;只是新的线路。如何执行此操作?

一旦获得EOF指示,请稍等片刻,然后再次尝试读取

编辑:以下是支持此解决方案的codez。您可以尝试一下,然后根据需要更改控制流机制

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");

    }
}

编辑:谢谢你添加了一些代码。就我个人而言,我只是做一个睡眠,而不是等待用户输入。这将更符合用户的要求。

类似的方法可能会奏效:

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);
}

为了简单起见,我们省略了异常处理。

您可以尝试使用RandomAccessFile

打开文件,然后调用length()以获取文件的长度。然后可以使用readLine()方法获取数据。然后,下次打开文件时,可以使用seek()方法将自己定位到文件的前一端。然后读取行并保存文件的新长度