2011-08-19 2 views
9

Vorrei nascondere la prima riga di un file di testo in Java. Questo file è di diversi gigabyte e non voglio fare una copia. Utilizzando il suggerimento da this post, sto tentando di farlo utilizzando RandomAccessFile, tuttavia sta scrivendo troppo.Come posso sostituire la prima riga di un file di grandi dimensioni in Java?

Ecco il mio codice:

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

E se volete qualche input e output di esempio, ecco cosa succede:

Prima:

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

Dopo:

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

In questo esempio, nella maggior parte degli editor il file inizia correttamente con 24 spazi vuoti, ma sono stati sostituiti 48 caratteri (incluse le nuove linee). Dopo aver incollato qui vedo strani punti interrogativi. La sostituzione a doppia dimensione mi fa pensare a qualcosa che coinvolge la codifica, ma ho provato writeUTF con gli stessi risultati.

+2

Yay per usare il mio nome! –

+0

Solo per quello che sai, è impossibile modificare un file "sul posto" con file system moderni. Una nuova copia è sempre fatta. – toto2

+0

In che file è la codifica? 1521? UTF8? UCS2? –

risposta

8

char in Java è 2 byte.

utilizzare writeBytes invece.

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

Da JavaDoc sembra esattamente quello che stai cercando.

+0

writeBytes FTW! – Zugwalt

5

Come si scrivono i caratteri (che in Java sono a 16 bit) ogni carattere utilizza due byte. Ti suggerisco di provare a scrivere il numero di byte che vuoi altrimenti i tuoi spazi si trasformeranno in nul e space byte.