从java中的文件中删除一行

时间:2010-03-18 16:01:35

标签: java file-io

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

编辑添加了一些提示

通过创建FileChannel并使用Buffer,您可以打开该文件,通过将其翻过来删除所需的行。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

这是一个很好的tutorial如何做到这一点。

希望这有帮助!