【问题标题】:How to offset when reading a changing file读取更改文件时如何偏移
【发布时间】:2019-06-12 02:24:52
【问题描述】:

通过 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”是什么样的。冗余值过多。 所以,你试过的方法不可用。

【问题讨论】:

  • 你的问题没有代码不清楚。 避免重复是什么意思?为什么不替换值?
  • 一分钟前我已经读完了'e'。现在文件,这意味着在'e'之后读取而不读取'e'。因为 a,b,c,d,e 是重叠的。

标签: java ftp inputstream bufferedreader


【解决方案1】:

这个问题根本无法解决。

假设文件是​​第一个

abcdd

现在是

ddefg

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

cdddef

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多