如何用Java替换大文件的第一行?

时间:2011-08-19 20:10:56

标签: java file file-io replace line

我想在Java中删除文本文件的第一行。这个文件是几千兆字节,我不想复制。使用来自this post的建议,我试图使用RandomAccessFile这样做,但它写的太多了。

这是我的代码:

RandomAccessFile raInputFile = new RandomAccessFile(inputFile, "rw");
origHeaderRow = raInputFile.readLine();
raInputFile.seek(0);
raInputFile.writeChars(Strings.repeat(" ",origHeaderRow.length()));
raInputFile.close();

如果您想要一些示例输入和输出,请执行以下操作:

在:

first_name,last_name,age
Doug,Funny,10
Skeeter,Valentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10

后:

                        alentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10

在此示例中,在大多数编辑器中,文件正确地以24个空格开头,但已替换了48个字符(包括换行符)。粘贴到这里后,我看到了奇怪的问号。双倍大小的替换使我的事情涉及编码变得混乱,但我尝试了writeUTF具有相同的结果。

2 个答案:

答案 0 :(得分:8)

Java中的

char是2个字节。

改为使用writeBytes

raInputFile.writeBytes(Strings.repeat(" ",origHeaderRow.length()));

来自JavaDoc看起来正是您正在寻找的。

答案 1 :(得分:5)

当您编写字符(在Java中为16位)时,每个字符使用两个字节。 我建议你尝试写下你想要的字节数,否则你的空格会变成nulspace字节。