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

Zug*_*alt 9 java file-io replace file line

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

这是我的代码:

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

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

之前:

first_name,last_name,age
Doug,Funny,10
Skeeter,Valentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10
Run Code Online (Sandbox Code Playgroud)

后:

                        alentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*yak 8

char 在Java中是2个字节.

使用writeBytes来代替.

raInputFile.writeBytes(Strings.repeat(" ",origHeaderRow.length()));
Run Code Online (Sandbox Code Playgroud)

JavaDoc看起来正是您正在寻找的.


Pet*_*rey 5

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