从Java中的大文本文件中删除行

时间:2009-09-02 13:13:00

标签: java text io line

有人知道如何从文本文件中删除一行。

我正在寻找除了逐行读取和写入之外的其他内容,并跳过您要删除的行。

例如:我的文件计数1346行,我想删除第520行。

5 个答案:

答案 0 :(得分:4)

文本文件不支持零成本重组。它只是一个连续的字节序列。如果你想从文件中间删除一些字节(通过暗示将所有后面的字节移动到覆盖删除的字节),你必须复制并重写所有后面的字节。

您有几个选择。将整个文件读入内存,进行删除,然后将文件写出。 (希望成功完成写入后在原始文件上重命名的临时文件)或者只需从源文件中读取缓冲区中的数据并做一些工作就做一些花哨的步法。

答案 1 :(得分:2)

解决方案是否需要用Java编写? UNIX命令 sed grep 就是为了这个目的而制作的,并且可能会表现得更好。如果您运行的是Windows,则可以通过Cygwin访问这些工具,或者可能存在本地端口。

答案 2 :(得分:1)

是。罗布是对的。 试试这个

sed -e '520d' <yourfile>

将输出重定向到新文件

这里520是您要删除的行号

答案 3 :(得分:0)

你可以读取整个文件,进行正则表达式替换(假设你知道完全匹配等)然后将文件写回来。

就我个人而言,我不确定这个答案有多大价值:)

答案 4 :(得分:0)

好吧,如果你知道长度(或最后一行的内容):

long lastLineLength = lastLine.length();
RandomAccessFile raf = new RandomAccessFile("RandFile.txt", "rw");
long length = raf.length();
raf.setLength(length - lastLineLength );
raf.close();