【问题标题】:How can I read text appended to the end of a file I already read?如何阅读附加到已阅读文件末尾的文本?
【发布时间】:2011-04-26 20:21:02
【问题描述】:

我想用 Java 读取一个文本文件。完成后,另一个应用程序将附加一些文本,然后我想阅读它。假设有十行。当另一个应用程序再追加一行时,我不想再次读取整个文件;只是新线。我该怎么做?

【问题讨论】:

    标签: java text io


    【解决方案1】:

    这样的事情可能会奏效:

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

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

    【讨论】:

      【解决方案2】:

      收到 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。就个人而言,我会只是做一个睡眠而不是等待用户输入。这将更符合用户的要求。

      【讨论】:

        【解决方案3】:

        您可以尝试使用 RandomAccessFile。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多