Java 如何在读取更改的文件时进行偏移
通过JAVA,我通过Java 如何在读取更改的文件时进行偏移,java,ftp,inputstream,bufferedreader,Java,Ftp,Inputstream,Bufferedreader,通过JAVA,我通过InputStream和BufferedReader定期读取不断变化的文本文件 比如说, [a minute ago] test.txt = abcde [now] test.txt = cdefg (a,b be deleted / f,g add) test.txt = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 我阅读了过去的所有文件,并将它们保存到“e” 当我定期重新启动程序时, 我想在“e”之后读取并保存当前文件
InputStream
和BufferedReader
定期读取不断变化的文本文件
比如说,
[a minute ago]
test.txt = abcde
[now]
test.txt = cdefg
(a,b be deleted / f,g add)
test.txt = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
我阅读了过去的所有文件,并将它们保存到“e”
当我定期重新启动程序时,
我想在“e”之后读取并保存当前文件,以避免重复。
(我只想阅读和存储f.g.)
首先,我试过的唯一方法
=从当前文件中搜索过去文件中的最后一个“e”
然后跳到“e”
然后阅读并保存它。
当然,它没有任何问题
但是,呃,这个例子是abcdefg
。按字母顺序排列,无重复。假设它经常被复制
比如说,
[a minute ago]
test.txt = abcde
[now]
test.txt = cdefg
(a,b be deleted / f,g add)
test.txt = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
如果您搜索“a”,您将发现我上次在过去的文件中读取的“a”是什么样子的。冗余值太多。
因此,您尝试的方法不可用。这个问题根本无法解决 假设文件是第一个
abcdd
现在是了
ddefg
无法判断两种情况下的第一个d
是否相同。可能在某个时间点,该文件如下所示:
cdddef
因此,要可靠地完成您想做的事情,唯一的方法就是为您可以搜索的每个条目引入唯一的标记
但您的问题可能更糟:无法保证文件在读取时保持不变(在大多数操作系统上)。您可能必须将其锁定以防止并发修改。如果没有代码,您的问题是不清楚的。避免重复意味着什么?为什么不替换这个值呢?我一分钟前已经读完了“e”。现在,它表示在“e”之后读取而不读取“e”。因为a,b,c,d,e是重叠的。