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

Через JAVA я периодически читаю изменяющийся текстовый файл через InputStream и BufferedReader.

Например,

[a minute ago]
test.txt = abcde

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

Я прочитал все файлы из прошлого и закончил сохранение их в 'e' и когда я периодически перезапускаю программу, Я хочу прочитать и сохранить текущий файл после 'е', чтобы избежать дублирования. (Я хотел бы читать и хранить только фг.)

Прежде всего, единственный способ, которым я пытался = Поиск последнего 'e' из прошлого файла из текущего файла и пропустил "е" а затем прочитайте и сохраните его. Конечно, работает без проблем.

Но, например, abcdefg. В алфавитном порядке без дублирования. Предполагая, что это часто дублируется Например,

test.txt = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Если вы ищете «a», вы узнаете, на что похоже «a», которое я последний раз читал в прошлом файле. Слишком много значений избыточности. Таким образом, метод, который вы попробовали, недоступен.

1 Ответ

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

Эту проблему принципиально невозможно решить.

Представьте, что файл был первым

abcdd

, а теперь это

ddefg

Невозможно сказать,если первый d одинаков в обоих случаях.Возможно, был момент, когда файл выглядел следующим образом:

cdddef

Так что единственный способ сделать то, что вы хотите сделать надежно, это ввести уникальные маркеры для каждой записи, которую вы можете искать.

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

...