PDA

Visualizza la versione completa : [java] liste


ioanna
16-12-2003, 18:22
ciao!
Sto facendo un progetto in java e devo per forza utilizzare le liste.
Visto che sto creando una specie di segreteria ho pensato di utilizzare una lista che mi dica quale matricola corrisponde a ogni cognome che io gli metta.La mia domanda e': primo come si fa.....
e se questo e' troppo almeno che mi spieghiate se la lista si ricorda comunque i dati, o la devo salvare dentro qualche file pur di non perderli.

grazie!

afurly
16-12-2003, 21:47
Le liste come tutte le altre strutture dati si dimenticano tutti i dati al termine del programma. Se vuoi che i dati rimangano devi salvarli in un file o in un database.

Per quanto riguarda l'uso dell liste puoi consultare le api per la classe LinkedList all'indirizzo http://java.sun.com/j2se/1.4.1/docs/api/

ciao ciao

ioanna
17-12-2003, 15:52
Grazie!Mi sapresti per caso dire anche come posso fare per salvare una lista con chiave in un file?La mia lista contiene un intero come chiave e una stringa. :confused:

Ciao ciao!!

ioanna
17-12-2003, 16:02
Piu' precisamente, so come salvarla ma non saprei come poi recuperare tutti i dati per visualizzare tutta la lista intera...

Fox82
17-12-2003, 17:49
Tramite le classi ObjectOutputStream e ObjectInputStream puoi direttamente leggere e scrivere oggetti (il processo si chiama serializzazione);

l'unico requisito è che gli oggetti che intendi leggere/scrivere implementino l'interfaccia Serializable (e la classe LinkedList lo fa)

Guardati la documentazione per maggiori informazioni

ioanna
22-12-2003, 15:09
ho provato a farlo ma non mi funziona.Io utilizzo cmunque la listnode...:cry:

ioanna
22-12-2003, 16:26
ho scritto questo codice:
FileOutputStream f = null;
try
{
f = new FileOutputStream("lista.dat");
}
catch (IOException e3)
{
System.exit(1);
}
ObjectOutputStream os = null;
Couple c = new Couple();
c.setFirst(new String (fcognome));
c.setSecond(new Integer(matric));
try
{
os = new ObjectOutputStream(f);
os.writeObject(c);
os.flush();
os.close();
}
catch(IOException e3)
{
System.exit(2);
}

FileInputStream fin = null;
ObjectInputStream is = null;
try
{
fin = new FileInputStream("lista.dat");
is = new ObjectInputStream(fin);
}
catch(IOException e3)
{
System.exit(3);
}

Couple c2 = null;
try
{
c2 = (Couple)(is.readObject());
is.close();
}
catch(IOException e3)
{
System.exit(4);
}
catch(ClassNotFoundException e3)
{
System.exit(5);
}

System.out.println(c2.getFirst());
System.out.println(c2.getSecond());
}

ma cosi' mi fa vedere solo i dati immessi l'ultima volta, mentre io vorrei che me li faccesse vedere sempre tutti.
Mi sapreste dire come fare?

grazie!

Angelo1974
22-12-2003, 18:27
Prova con dichiarare:

f = new FileOutputStream("lista.dat", true);
Mi sembra dovrebbe fare in modo che quanto scritto prima non sia sovrascritto.

Non l'ho provato.... e tieni presente che sono le 18.30 del 22/12; però ad occhio dovrebbe andare.
Ciao :ciauz:

ioanna
23-12-2003, 10:59
l'ho provato (ho messo quindi il true dentro la dichiarazzione di f che gia' avevo), ma adesso non mi memmorizza piu niente e continua a farmi vedere l'ultimo dato che aveva memmorizzato prima di questo cambiamento.
Lo so che questi giorni dovrei parlare di tutt'altro ma ho verramente bisogno di finire questo progetto prima delle feste!!!
AIUTOOOOOOOOO!!!

Angelo1974
23-12-2003, 12:12
Strano, infatti leggendo il JavaDoc (http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html) di FileOutputStream con il booleano settato a true dovrebbe "appendere" il contenuto alla fine del file e non dell'inizio.
Strano davvero; prova a fare + inserimenti in maniera da renderti coto... può essere che all'inizio te l'abbia cancellato ma poi inizierà ad "appendere"; altrimenti non so...prova a postare il codice e vediamo.
Ciao :ciauz:

Loading