1

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

我正在寻找其他内容,而不是逐行读取和写入并跳过您想要删除的行。

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

4

5 回答 5

4

文本文件不支持零成本重组。它只是一个连续的字节序列。如果要从文件中间删除一些字节(并暗示将所有后续字节向上移动以覆盖已删除的字节),则必须复制并重新写入所有这些后续字节。

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

于 2009-09-02T14:05:35.490 回答
2

解决方案是否需要用 Java 编写?UNIX 命令sedgrep就是为此目的而设计的,它们的性能可能会更好。如果您运行的是 Windows,则可以通过Cygwin访问这些工具,或者那里可能有本地端口。

于 2009-09-02T13:57:18.790 回答
1

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

sed -e '520d' <yourfile>

将输出重定向到新文件

这里 520 是你要删除的行号

于 2009-09-02T14:04:20.360 回答
0

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

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

于 2009-09-02T13:33:01.133 回答
0

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

long lastLineLength = lastLine.length();
RandomAccessFile raf = new RandomAccessFile("RandFile.txt", "rw");
long length = raf.length();
raf.setLength(length - lastLineLength );
raf.close();
于 2009-09-02T13:41:47.257 回答