Înlocuiți prima linie a unui fișier text în Java

Am un fișier text în care vreau să schimb doar prima linie a fișierului. Fișierul ar putea fi de milioane de rânduri lungi, așadar aș prefera să nu fiu nevoit să trec peste tot, așa că mă întreb dacă există un alt mod de a face acest lucru.

Aș dori, de asemenea, să aplice câteva reguli la prima linie pentru a înlocui instanțele anumitor cuvinte cu alte cuvinte.

Este posibil?

8

5 răspunsuri

Un RandomAccessFile va face truc, cu excepția cazului în care lungimea liniei rezultate este diferită de lungimea liniei inițiale.

Dacă se dovedește că sunteți obligat să efectuați o copie (în cazul în care primul rând este înlocuit și restul datelor trebuie copiat așa cum este), vă sugerăm să utilizați un BufferedReader și BufferedWriter . Folosiți mai întâi BufferedReader readLine() pentru a citi primul rând. Modificați-l și scrieți-l în BufferedWriter . Apoi folosiți o matrice char [] pentru a efectua o copie a forței brute a restului fișierului. Acest lucru va fi mai eficient decât a face linia de copiere după linie. Dați-mi voie să știu dacă aveți nevoie de detalii ..

O altă opțiune este de a efectua citirea și scrierea în același fișier. Va fi un pic mai complex. :) Dați-mi voie să știu dacă aveți nevoie de detalii despre acest lucru ..

15
adăugat
Puteți pls oferi unele informații dacă lungimea șirului care urmează să fie înlocuit este diferit. Este posibil fără copierea unui fișier nou
adăugat autor png, sursa
Dacă lungimea este diferită, va trebui cel puțin să re-scrieți toți octeții, fie în același fișier, fie într-un fișier diferit.
adăugat autor volley, sursa
Oricine are un exemplu de cod pentru a face acest lucru cu RandomAccessFile?
adăugat autor jymbo, sursa

Dacă noua linie are o valoare diferită de caractere (octeți) decât prima linie originală, va trebui să re-scrieți întregul fișier pentru a scăpa de decalajul sau pentru a evita suprascrierea unei părți a liniei a doua.

Desigur, diferite instrumente, cum ar fi String.replaceFirst (String regex, String replacement) ( javadoc ) sau RandomAccessFile ( javadoc ) vă poate ajuta cu această sarcină.

4
adăugat

Why not write a Perl script and invoke it using Runtime.exec(). Not a pure java solution though. Also have a look at this article before going deep http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

4
adăugat

Vrei un RandomAccesssFile . Folosind fișierul puteți citi și scrie oricând doriți în fișier.

Este asemănător unui InputStream și OutputStream, dar permite citirea și scrierea oriunde doriți.

2
adăugat

apply a regex only once. String.replaceFirst("regex", "replacementstring") : http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replaceFirst(java.lang.String,%20java.lang.String)

Deschideți fișierul ca RandomAccessFile. Citiți prima linie într-un șir și apoi aplicați modificarea și apoi scrieți șirul înapoi.

1
adăugat
"Fișierul ar putea fi milioane de rânduri lungi" - noroc cu regexps! LAUGH OUT LOUD
adăugat autor Vladimir Dyuzhev, sursa
numai dacă lungimea liniei 1 nu se modifică
adăugat autor Cheekysoft, sursa