как читать изменяющийся текстовый файл через смещение - PullRequest
0 голосов
/ 11 июня 2019

Например, есть один текстовый файл.

текстовые файлы изменяются.

test.txt = abcde

Через 1 минуту

test.txt = cdefg
(a,b be deleted / f,g add)

в этой ситуации я прочитал всеПрошлый файл до e.

, поэтому я хочу прочитать f текущего файла.(Это пример, и никто не знает, какие слова придут.)

Способ поиска последнего слова, которое я прочитал, и смещения невозможен, поскольку существует вероятность дублирования.

Буду признателен за вашу помощь:)

1 Ответ

0 голосов
/ 11 июня 2019

Ответ будет зависеть от семантики файловой системы и использования буферов. Java работает поверх операционной системы, которая предоставляет абстракцию под названием «файлы», которую java предоставляет через свои собственные API (с FileInputStream и т. Д.).

Если вы используете BufferedReader, у этого считывателя есть буфер, в котором он хранит копию в памяти того, что читает из фактического файла (как сообщает базовая ОС). Поэтому, если вы что-то измените в файле вне Java, нет никакой гарантии, что ваш читатель вернет самую свежую свежую версию - вместо того, что он считал в буфер некоторое время назад.

Безопасный способ получить свежее содержимое:

  1. закрыть файл
  2. открыть его снова
  3. найдите место, которое вы хотите прочитать, и прочитайте его содержимое.

Даже в этом случае вы не гарантированно получите действительно свежее содержимое, поскольку оно зависит от способа обработки записей в ОС (что, в свою очередь, может зависеть от того, на каком устройстве находятся файлы: общие сетевые ресурсы). не то же самое, что вращающиеся диски ...). Может быть задержка между одним приложением, которое думает, что оно записало данные на диск (или, что еще хуже, записывает его во внутренний буфер, который еще не был записан на диск), и фактическим файлом является полностью записанным и готов быть прочитанным другими. Обратите внимание на акцент на полностью : вы можете получить частично обновленные версии файлов, если вы читаете их, пока они еще пишутся в другом месте.

Это одна из причин, по которой люди используют базы данных: они гарантируют, что вы никогда не получите частично обновленные версии (с помощью транзакций и атомарных обновлений). Существуют лучшие способы, чем файлы, для связи двух приложений на одном компьютере; Например, рассмотрите возможность использования сокетов.

...