读取更改文件时如何偏移

How to offset when reading a changing file

通过 JAVA,我通过 InputStreamBufferedReader 定期读取不断变化的文本文件。

例如,

[a minute ago]
test.txt = abcde

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

我读取了过去的所有文件并将它们保存到'e' 当我定期重新启动程序时, 我想从 'e' 之后读取并保存当前文件以避免重复。 (我只想读取和存储 f.g。)

首先,我试过的唯一方法 = 从当前文件中搜索过去文件中的最后一个 'e' 并跳到 'e' 然后阅读并保存。 当然,它没有任何问题。

但是,呃,例子是abcdefg。按字母顺序排列,不重复。假设它经常被复制 例如,

test.txt = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

如果你搜索 'a',你会发现 'a' 我上次在过去的文件中阅读的内容是什么样的。冗余值过多。 所以,您试过的方法不可用。

这个问题根本无法解决。

假设文件是​​第一个

abcdd

现在是

ddefg

无法判断第一个 d 在这两种情况下是否相同。文件可能在某个时间点看起来像这样:

cdddef

因此,要想可靠地完成您想做的事情,唯一的方法就是为您可以搜索的每个条目引入唯一的标记。

但您的问题可能更糟:无法保证文件在您阅读时保持不变(在大多数操作系统上)。您可能必须锁定它以防止并发修改。