从java中的文件中删除一行

好的,所以我试图用java删除文本文件中的行。 目前我正在这样做的方式是跟踪行号并输入索引。 索引是我要删除的行。 因此,每次我读取新的数据行时,我都会增加行数。 现在当我到达相同索引的行数时,我不会将数据写入临时文件。 现在这可行,但如果我正在使用大文件而且我不得不担心内存限制。 我怎么能用…文件标记呢? 例如..将文件标记放在我要删除的行上。 然后删除该行? 或者那只是太多的工作?

不要将文件保留在内存中,只需一次读取一行并将其一行写入临时文件,一次跳过需要删除的行。

您可以使用nio删除与该行对应的文件区域。

编辑添加了一些提示

通过创建FileChannel并使用Buffer ,您可以打开文件,通过将后面的内容推过来删除所需的行。

不幸的是,我必须在这里大致承认我对nio停止的了解……

您可以使用随机访问文件。 保持一个指向您正在读取的字节的指针,另一个指向您正在编写的字节。 使用数据填充缓冲区,并在读取时计算行数。 如果没有要删除的内容将通道重置为写指针并输出缓冲区,则将通道重置为读指针。 如果找到要删除的行,则将缓冲区输出到写入索引处的那一点,然后递增读取指针,直到找到该行的结尾,然后输出缓冲区的剩余部分(根据需要重新填充缓冲区),重复对于要删除的每一行。

理想情况下,我会使用ETL工具来执行此类批处理工作。 假设您无法访问此类工具,我建议首先解压缩该文件,然后使用java.util.zip读取它。

这是一个很好的教程 ,如何做到这一点。

希望这可以帮助!