gpt4 book ai didi

java - 如何删除一条记录并继续读取文件?

转载 作者:行者123 更新时间:2023-12-01 17:10:01 25 4
gpt4 key购买 nike

我必须读取一个包含超过一百万条记录的连续文件。我必须读取每一行/记录,并且必须从文件中删除该记录/行并继续阅读。

没有找到任何关于如何在不使用临时文件或创建/重新创建同名新文件的情况下执行此操作的示例。

这些是文本文件。每个文件大约有 0.5 GB 大,每个文件中有超过一百万行/记录。

目前,我们正在将所有记录复制到内存中,因为如果在文件处理过程中发生任何事情,我们不想重新处理任何记录。

最佳答案

假设有问题的文件是一个简单的顺序文件 - 你不能。在Java文件模型中,删除文件的一部分意味着删除删除点之后的全部文件。

一些替代方法是:

  • 在您的过程中复制文件,省略您要删除的部分。这是执行此操作的正常方法。
  • 使用您知道文件中从未出现过的某个值覆盖要删除的文件部分,然后稍后复制该文件,删除标记的部分。
  • 将整个文件存储在内存中,根据需要进行编辑,然后再次写入。仅仅因为您拥有一百万条记录,这并不意味着不可能。如果您的文件有 0.5GB,正如您所说,那么这种方法几乎肯定是可行的。
  • 每次删除某条记录时,都会将删除后文件的所有内容复制到新位置。这将是极其低效且容易出错的。

除非您可以将文件存储在内存中,否则使用临时文件是最有效的。这就是为什么每个人都这样做。

如果这是某种数据库,那么这是一个完全不同的问题。

编辑:自从我回答这个问题以来。评论表明用户想要做的是使用删除来跟踪哪些记录已经被处理。如果是这样的话,有更简单的方法可以做到这一点。一种好的方法是编写一个文件,其中仅包含已处理的文件字节(或记录)的计数。如果处理器崩溃,请通过删除已处理的记录来更新文件,然后重新开始。

关于java - 如何删除一条记录并继续读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com