PDA

Visualizza la versione completa : (java) come modificare un file di testo


abcd1000
21-10-2003, 16:42
Ho un file con la seguente formattazione

Prova.txt:

word1 = pippo
word2 = pluto
word3 = minni
word4 = nonno
ecc..

Dovrei cambiare il valore associato al word3 in topo, cioè:

word1 = pippo
word2 = pluto
word3 = topo
word4 = nonno
ecc..

Per fare questo avevo pensato: leggo tutto il file con la classe Streamtokenize, il token opportuno lo sostituisco con il valore che voglio, riscrivo il file

Il problema è che non so come fare a riscrivere il file con il formato con cui l'ho letto

Avete qualche idea?

Popper
22-10-2003, 12:55
se il tuo file ha una struttura regolare (la struttura sarà sempre world1 seguito da world2 world3... worldN) puoi semplificare il tutto e caricare tutti gli elementi in una struttua di tipo Vector.
Poi modifichi il 3o elemento (di indice 2)

worlds.setElementAt("topo",2);

Quindi,per riscrivere il file : ti crei (ad esempio) il solito PrintWriter e ricostruisci il file con un ciclo

for (int i =0; i< worlds.size(); i++)
outWriter.println(" world" + (i+1) + " = " + worlds.elementAt(i));


Spero di essere stato chiaro/utile. :ciauz:

abcd1000
22-10-2003, 13:22
thx per la risposta oramai ho optato per l'uso della classe filerandomaccess, anche se la tua mi piaceva come soluzione

La mia soluzione non funziona più se modificano anche solo di una virgola il file

La tua soluzione FORSE è più lenta nel caso in cui il file abbia molti campi e quindi il vector assuma dimensioni consistenti

Popper
22-10-2003, 15:09
non dovrebbe essere troppo lenta visto che c'è solo un ciclo lineare (complessità N)... poi dipende dalla consistenza delle informazioni. per milioni di record ti conviene utilizzare un database indicizzato!

smprog
23-10-2003, 12:12
Potresti anche usare un file di properties e usare l'oggetto java.util.Properties, che ti permette di leggere da file e ottenere una Hashtable; dopodiche modifichi la proprietà che ti interessa, e risalvi l'oggetto Properties nel file
ciao

abcd1000
23-10-2003, 13:11
ottima soluzione, thx

Loading