View Full Version : [JAVA] Salvataggio e Caricamento FILE
Ciao a tutti.Non riesco a salvare il mio archivio in un file.Mi dite i metodi da utilizzare per salvare su file e caricare un file?
In [C] utilizzavo rispettivamente fprintf( ) e fscanf( ).
In java????
Grazie
Don[ITA]
24-06-2008, 23:53
Dipende da cosa vuoi dalvare nel file e da cosa vuoi leggere.
Se si tratta di semplici stringhe datti un occhio a PrintWriter per salvare e BufferedReader per leggere.
;23040822']Dipende da cosa vuoi dalvare nel file e da cosa vuoi leggere.
Se si tratta di semplici stringhe datti un occhio a PrintWriter per salvare e BufferedReader per leggere.
Si voglio salvare semplici stringhe dato che devo salvare e caricare un archivio di album di canzoni.Una cosa,come faccio a creare un file???Cioè io in C utilizzavo fopen per creare un file...In java??Mi potresti fare un esempio scrivendo un piccolo codice di salvataggio e caricamento?grazie mille :)
banryu79
26-06-2008, 09:18
String filename = "myTextFile.txt";
// crea un print writer, un oggetto che ti permete di stampare in un file con un
// buffer di supporto e in modo formattato
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(myTextFile.txt)));
// stampa una riga di testo nel file
writer.println("Questo è il file di TeX-mAn!");
// chiudere il file
writer.close();
Se stai usando un IDE con supporto IntelliSense (per esempio NetBeans) quando nel codice hai creato l'istanza "writer" puoi dare una veloce occhiata ai metodi che la classe PrintWriter espone insrendo subito dopo il carattere di punto "." per accedere ai membri pubblici: dovrebbe apparire un pop-up con i Javadoc relativi alla classe.
Altrimentoi consulta i Javadocs ufficilai online della Sun.
P.S.: il codice qui sopra va racchiuso in un blocco try-catch perchè alcuni metodi di PrintWriter possono lanciare una IOException, che va catturata e gestita oppure rilanciata a sua volta al chiamante dal metodo che fa uso del PrintWriter.
try
{
//... usa il PrintWriter
}
catch (IOException e)
{
//... gestire eventuale eccezione
}
finally
{
// in ogni caso chiudere il file writer
writer.close();
}
Don[ITA]
26-06-2008, 09:43
Mentre per leggere tutte le righe del tuo file:
try{
BufferedReader reader = new BufferedReader(new FileReader(fileName));
for(String line = reader.readLine(); line != null; line = reader.readLine())
System.out.println(line);
reader.close();
}catch(Exception e){
e.printStackTrace();
}
Il salvataggi funziona alla perfezione.Per quanto riguarda il caricamento,utilizzando questo procedimento stampo ciò che è presente nel file,mentre io voglio caricare ciò che cè nel file in memoria.Ad esempio voglio ricaricare una lista di persone.Come faccio???
banryu79
04-07-2008, 17:09
Semplice, nel ciclo for del codice postato da Don[ITA]:
try{
BufferedReader reader = new BufferedReader(new FileReader(fileName));
for(String line = reader.readLine(); line != null; line = reader.readLine())
System.out.println(line);
reader.close();
}catch(Exception e){
e.printStackTrace();
}
invece di mandare allo standard output la stringa "line" te la memorizzi, per esempio, in un array di String[] oppure in un oggetto delle Collection, tipo un ArrayList<String>: insomma, ci fai quello che vuoi, cioè te le memorizzi dove ti pare.
Semplice, nel ciclo for del codice postato da Don[ITA]:
try{
BufferedReader reader = new BufferedReader(new FileReader(fileName));
for(String line = reader.readLine(); line != null; line = reader.readLine())
System.out.println(line);
reader.close();
}catch(Exception e){
e.printStackTrace();
}
invece di mandare allo standard output la stringa "line" te la memorizzi, per esempio, in un array di String[] oppure in un oggetto delle Collection, tipo un ArrayList<String>: insomma, ci fai quello che vuoi, cioè te le memorizzi dove ti pare.
Grazie.Ora è tutto chiaro :)
NOOOOOOO!!!HO ANCORA DEI PROBLEMI SUL CARICAMENTO!!!
Allora scrivo il codice e quello che devo fare.
Io ho un archivio di album gestito tramite la collection Vector<Album>
Salvo l'archivio su file utilizzando l'oggetto PrintWriter che mi avete detto.
Fino a qui tutto ok...Quando vado a caricare vorrei che gli album contenuti nel file vengano reinseriti nel Vector<Album>
La funzione dovrebbe essere così:
Vector<Album> CaricamentoFile (Vector<Album> v)
{
.....
}
Ora come faccio ad inserire nel vettore i dati di ogni album presente nell'archivio!!!!?!?!?
Gli attributi dell'album sono tipo,autore,titolo,casaDiscografica,numeroCanzoni,Canzoni.
Spero in una soluzione...Sono in crisi:( :mc: :cry: :help: :help: :muro:
Anzichè scrivere stringhe in un file di testo, perchè non usare writeObject e readObject? In questo modo scrivi e leggi oggetti interi in un file, ma pensa a tutto Java :)
Guarda la documentazione di ObjectInputStream e ObjectOutputStream
http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html
http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html
Don[ITA]
07-07-2008, 14:58
La soluzione di leo è quella che garba di più secondo me :D
Ti prendi il tuo Vector di album e lo salvi con writeObject(Object o) della classe ObjectOutputStream. Quando devi recuperare il tuo "database" usi readObject() di ObjectInputStream. Veloce e indolore :cool:
Unica cosa...perchè usi Vector? è un programma multi thread? se non lo è ti conviene usare ArrayList che è più veloce :rolleyes:
Ciauz
;23210435']La soluzione di leo è quella che garba di più secondo me :D
Ti prendi il tuo Vector di album e lo salvi con writeObject(Object o) della classe ObjectOutputStream. Quando devi recuperare il tuo "database" usi readObject() di ObjectInputStream. Veloce e indolore :cool:
Unica cosa...perchè usi Vector? è un programma multi thread? se non lo è ti conviene usare ArrayList che è più veloce :rolleyes:
Ciauz
Ecco la funzione di salvataggio
void SalvaSuFile(Vectro<Album> v)
{
FileOutputStream fos=new FileOutputStream("Arichivio.txt);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(v);
oos.close();
}
Quando scrivo questo mi genere una NotSerializableException...Dove ho sbagliato?^^
Don[ITA]
08-07-2008, 12:11
La tua classe Album deve implementare l'interfaccia Serializable ;)
;23222837']La tua classe Album deve implementare l'interfaccia Serializable ;)
Fatto ma mi continua a generare java.io.NotSerializableException: java.io.BufferedReader at java.io.ObjectOutputStream.writerObject(Unknow Source)...
:( bob :P
Le classi degli oggetti che serializzi devono implementare *tutte* l'interfaccia Serializable. Quindi, se dentro la classe Album hai un campo di classe Artista, anche la classe Artista deve implementare Serializable. E così via a cascata :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.