如何从随机访问文件中删除特定行

时间:2009-06-01 11:34:29

标签: java

我正在使用一个随机访问文件,其中我想要删除满足某些条件的行,就像我有记录一样

MCA 30

MBA 20

BCA 10

现在我的要求是如果我输入MBA,那么第二行将被删除。

3 个答案:

答案 0 :(得分:2)

通常,从文件中间删除项目意味着在条目后重写所有条目,以便使用项目占用的空间。

有些事情会标记使用某些无效值删除的项目,以便发现该插槽未使用。通常,他们甚至不会重复使用已删除的插槽,因为这比您想象的更加管理,并且基本上是在文件中实现类似堆的体系结构。他们需要一个单独的“压缩”步骤来消除此死空间。 Microsoft Jet(在Access中)就像这样工作。

有一种非常酷的优化适用于某些情况:

如果行是无序的,并且长度相等,则可以使用最后一个条目覆盖要“删除”的条目,并截断该文件。

如果行是无序的但不是固定的长度,您可以使用此方法的更复杂的变体,您可以从靠近末端的一些条目移动一个与要删除的项目长度相同的条目,以便只需要随机播放尽可能少的参赛作品。

答案 1 :(得分:1)

如果它是一个简单的文本文件,则必须将除MBA行之外的所有内容复制到新文件中。随机访问文件实际上不支持删除或插入。

优化:在MBA排队后(在同一文件中)移动所有内容

替代方案:使用更像结构化的数据库。

答案 2 :(得分:0)

听起来像你正在寻找像'grep'这样的实现。有一个GNU grep的Java实现,你可以找到文档here, 并从this页面的链接下载。