开发者

How can I replace the first line of a large file in Java?

I would like to blank out the first line of a text file in Java. This file is several gigabytes and I do not want to do a copy. Using the suggestion from this post, I am attempting to do so using RandomAccessFile, however it is writing too much.

Here is my code:

RandomAccessFile raInputFile = new RandomAccessFile(inputFile, "rw");
origHeaderRow = raInputFile.readLine();
raInputFile.seek(0);
raInput开发者_如何学编程File.writeChars(Strings.repeat(" ",origHeaderRow.length()));
raInputFile.close();

And if you want some sample input and output, here is what happens:

Before:

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

After:

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

In this example, in most editors the file correctly begins with 24 blank spaces, but 48 characters (including newlines) have been replaced. After pasting into here I see strange question mark things. The double size replacement makes me thing something involving encoding is getting messed up but I tried writeUTF with the same results.


char in Java is 2 bytes.

use writeBytes instead.

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

From JavaDoc looks exactly what you are looking for.


As you are writing chars (which in Java are 16-bit) each character uses two bytes. I suggest you try writing the number of bytes you wants otherwise your spaces will turn into nul and space bytes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜