Как я могу прочитать текст, добавленный в конец файла, который я уже прочитал? - PullRequest
2 голосов
/ 27 апреля 2011

Я хочу прочитать текстовый файл на Java. После того, как я закончу, какой-то текст будет добавлен другим приложением, а затем я хочу это прочитать. Допустим, есть десять строк. Когда другое приложение добавляет еще одну строку, я не хочу снова читать весь файл; просто новая линия. Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Примерно так может сработать:

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 голос
/ 27 апреля 2011

Как только вы получите индикацию 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");

    }
}

РЕДАКТИРОВАТЬ: Спасибо за добавление кода Тим.Лично я бы просто поспал вместо ожидания ввода пользователя.Это будет более точно соответствовать требованиям пользователей.

0 голосов
/ 27 апреля 2011

Вы можете попробовать использовать RandomAccessFile.

Откройте файл, а затем вызовите length (), чтобы получить длину файла.Затем вы можете использовать метод readLine () для получения ваших данных.Затем в следующий раз, когда вы откроете файл, вы можете использовать метод seek (), чтобы переместиться на предыдущий конец файла.Затем прочитайте строки и сохраните новую длину файла.

...