2011-08-19 149 views
9

我想用Java删除文本文件的第一行。这个文件是几千兆字节,我不想做一个副本。使用this post的建议,我正在尝试使用RandomAccessFile,但是它写得太多了。如何替换Java中的大文件的第一行?

这里是我的代码:

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 

In在这个例子中,在大多数编辑器中,文件正确地以24个空格开始,但是48个字符(包括换行符)已被替换。粘贴到这里后,我看到奇怪的问号事物。双倍大小的替换使我的事情涉及编码越来越乱了,但我试着用相同的结果writeUTF。

+2

耶使用我的名字! –

+0

就这么你知道,用现代文件系统编辑文件是不可能的。总是有一个新的副本。 – toto2

+0

该文件的编码是什么? 1521? UTF8? UCS2? –

回答

8

char是2个字节。

改为使用writeBytes

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

JavaDoc看起来正是你在找什么。

+0

writeBytes FTW! – Zugwalt

5

在编写chars(在Java中是16位)时,每个字符使用两个字节。 我建议你尝试写出你想要的字节数,否则你的空间将变为nulspace字节。在Java中是