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

Java 如何从随机访问文件中删除特定行,java,Java,我使用的是一个随机访问文件,其中我想删除一行,该行满足一些条件,比如我有记录 MCA 30 工商管理硕士20 BCA 10 现在我的要求是,如果我进入MBA,那么第二行将被删除 如果它是一个简单的文本文件,那么您必须将除MBA行以外的所有内容复制到一个新文件中。随机访问文件实际上不支持删除或插入 优化:在MBA排队后移动所有内容(在同一个文件中) 备选方案:使用更结构化的数据库。我觉得您在寻找类似“grep”的实现。有一个GNU grep的Java实现,你可以找到文档, 从页面的链接下载。通常,

我使用的是一个随机访问文件,其中我想删除一行,该行满足一些条件,比如我有记录

MCA 30

工商管理硕士20

BCA 10


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

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

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


备选方案:使用更结构化的数据库。

我觉得您在寻找类似“grep”的实现。有一个GNU grep的Java实现,你可以找到文档,
从页面的链接下载。

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

有些东西会用一些无效值标记删除的项目,以便发现插槽未使用。通常情况下,它们甚至不重用已删除的插槽,因为这比您可能想象的更具管理性,并且基本上是在文件中实现一种堆式体系结构。他们需要一个单独的“压缩”步骤,以便在以后移除这些死区。Microsoft Jet(在Access中)是这样工作的

在某些情况下,有一个非常酷的优化:

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


如果行是无序的,但长度不是固定的,您可以使用这种方法的一种更复杂的变体,即从靠近末尾的位置移动一些与要删除的项目长度相同的条目,以便只需要将尽可能少的条目重新排列起来。

行的长度是否始终相同?