PDA

Visualizza versione completa : Java tornare all'inzio dopo aver letto il file



AgguantaGiulio
12-04-11, 11: 01
Ho la necessità di leggere il file piu volte....
Ho il seguente codice:

Only registered members can view code.
Il file devo scorrerlo piu volte..come faccio a riposizionarmi a inizio file dopo averlo letto la prima volta?

Grazie

--- Post unito in modo automatico ---

risolto con la classe RandomAccessFileVolevo sapere se era possibile con burredREader?

Andy86
12-04-11, 11: 48
:bai

Non so se sia l'approccio giusto, ma io di solito ricreo semplicemente l'oggetto bufferedReader da capo ogni volta. :sisi

Ad esempio con un metodo del genere:


Only registered members can view PHP Code.Anche se di solito preferisco usare un timer al posto del ciclo while, così da poter gestire una riga per volta invece di immagazzinarle tutte.
Poi magari creo un metodo reset() personalizzato che si occupa di ricreare l'oggetto BufferedReader da capo.


Only registered members can view PHP Code.(ps: quando crei un nuovo oggetto in una var esistente, quello precedente viene perso e quindi ripulito dalla gc).

In alternativa ci sarebbe il metodo reset(), ma necessita prima del metodo mark(int readAheadLimit), perché ritorna alla linea su cui è stato chiamato quest'ultimo. :sisi

AgguantaGiulio
12-04-11, 14: 32
in che senso preferisci usare un timer??
Quindi se faccio mark(0);posso usare il metodo reset ??

Andy86
12-04-11, 22: 42
:bai


Quindi se faccio mark(0);posso usare il metodo reset ??Non proprio, ma leggersi un po' la documentazione (http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#mark%28int%29)? :boh
Il parametro che passi a mark(int) dice al metodo quanti caratteri possono essere letti prima che scada.
Cioè, se tu metti 1000 (mille), dopo che saranno stati letti mille caratteri il reset() non funzionerà più.
Per quanto riguarda il punto in cui viene piazzato il mark(int), corrisponde al punto in cui ti trovi quando lo chiami.

Quindi dovresti chiamarlo prima del readLine, fuori dal while, passandogli la lunghezza del file. :sisi


in che senso preferisci usare un timer??Nel senso che preferisco usare quello.
In javaSE javax.util.Timer (http://download.oracle.com/javase/6/docs/api/javax/swing/Timer.html#Timer%28int,%20java.awt.event.ActionLis tener%29) fornisce un timer bell'e che pronto, ma anche in javaME giocando un po' con i thread e schedule si può fare con facilità.

In non ricordo che lavoro avevo necessità di avere una gui aggiornata (chiamando repaint()) coi dati letti man-mano da un BR.
Restando vincolato ad un while non potevo farlo, perché il repaint() viene "collassato" e chiamato una volta sola quando il resto del codice finisce, perciò ho utilizzato un timer, così prendevo una riga per volta, la processavo, chiamavo repaint(), e poi via con l'altra riga... :sisi