2011-08-19 147 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中是