|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
[Java] problema file
ciao ho fatto questo programmino ma mi da sempre l'eccezione nella funzione write_file.. qualcuno mi sa dire perchè?? grazie.
Persona.java Codice:
public class Persona {
public String name;
public String number;
public String toString() {
return name + "\t" + number;
}
}
Codice:
import java.util.Vector;
import java.io.*;
public class Eser1 {
public static void main(String[] args) {
int choose;
Vector<Persona> elenco = new Vector<Persona>(1, 1);
read_file(elenco);
System.out.println("\tRUBRICA");
menu();
do {
do {
choose = Console.readInt("? ");
} while(choose < 1 || choose > 5);
switch(choose) {
case 1:
add(elenco);
break;
case 2:
modify(elenco);
break;
case 3:
delete(elenco);
break;
case 4:
showAll(elenco);
break;
case 5:
break;
default:
System.out.println("scelta errata. ripeti.");
}
} while(choose != 5);
write_file(elenco);
}
static void read_file(Vector<Persona> elenco) {
try {
int volte = 0;
FileInputStream f = new FileInputStream("persone.dat");
ObjectInputStream fIN = new ObjectInputStream(f);
while(true) {
try {
Persona p = (Persona) fIN.readObject();
elenco.addElement(p);
volte++;
} catch(EOFException e) {
System.out.println("caricate " + volte + " posizioni nel vettore");
f.close();
break;
}
}
}
catch(Exception e) {
System.out.println("non è possibile caricare il file.");
}
}
static void write_file(Vector<Persona> elenco) {
try {
FileOutputStream f = new FileOutputStream("persone.dat");
ObjectOutputStream fOUT = new ObjectOutputStream(f);
for(int i = 0; i < elenco.size(); i++) {
Persona p = elenco.elementAt(i);
fOUT.writeObject(p);
}
fOUT.flush();
f.close();
} catch(Exception e) {
System.out.println("eccezione in scrittura file.");
}
}
static void menu() {
System.out.println("1- aggiungi scheda\n2- modifica scheda\n3- elimina scheda");
System.out.println("4- visualizza rubrica\n5- esci");
}
static void add(Vector<Persona> elenco) {
Persona p = new Persona();
p.name = Console.readLine("inserisci nome: ");
p.number = Console.readLine("inserisci numero: ");
elenco.addElement(p);
}
static void modify(Vector<Persona> elenco) {
int ind = Console.readInt("inserire numero della scheda da modificare: ");
Persona p = new Persona();
p.name = Console.readLine("inserisci nuovo nome: ");
p.number = Console.readLine("inserisci nuovo numero: ");
try {
elenco.setElementAt(p, --ind);
}
catch(Exception e) {
System.out.println("posizione non esistente.");
}
}
static void delete(Vector<Persona> elenco) {
int ind = Console.readInt("inserire numero della scheda da eliminare: ");
try {
elenco.removeElementAt(--ind);
System.out.println("scheda elminata.");
}
catch(Exception e) {
System.out.println("posizione non esistente.");
}
}
static void showAll(Vector<Persona> elenco) {
Persona p = new Persona();
if(elenco.size() == 0)
System.out.println("rubrica vuota.");
else {
for(int i = 0; i < elenco.size(); i++) {
p = elenco.elementAt(i);
System.out.println(i+1 + "- " + p);
}
}
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Modena
Messaggi: 592
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
what is serializable?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Ti da errore in compilazione vero?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Serializable is a pen.
O meglio, Serializable is a "tag" interface. Se vuoi serializzare oggetti bisogna che la classe di quegli oggetti implementi la suddetta interfaccia... Vedi i javadocs per una descrizione dell'interfaccia. Vedi >qua< se vuoi approffondire alcuni aspetti della faccenda "serializzazione" |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Eh sì, ricordavo male...
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Jan 2008
Città: roma
Messaggi: 296
|
Quote:
l'eccezione che ti da e "NotSerializableException" Codice:
import java.io.Serializable;
public class Persona implements Serializable{
public String name;
public String number;
public String toString() {
return name + "\t" + number;
}
}
Ultima modifica di vladix : 01-03-2008 alle 18:19. |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
grazie adesso funziona anche se non ho la minima idea di cosa faccia Serializable.. comunque ho due domande:
1) ho tre eclipse installati in tre partizioni diverse(con tre jdk presumo diversi ma tutti recenti) e in uno mi lascia mettere Vector<Persona> come ho scritto qui gli altri due invece no.. non me lo spiego.. qualcuno mi sa dire perchè? 2) come faccio a dire se il file non esiste crealo? perchè ora come ora questo programma funziona se il file esiste già. grazie |
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Cmq in due parole Serializable è una specie di "marcatore": una classe che implementa Serializable può serializzare suoi oggetti. Se non la implementa (class Miaclasse implements Serializable) quando passi un oggetto di quella classe al metodo writeObject() viene sollevata un'eccezione. I motivi di questa meccanica sono scritti nella pagina che ti ho linkato nel mex precedente. Quote:
La versione 1.5 ha introdotto i Generics: che sono la feature che ti permette di dichiarare un Vector<Persona> invece di un "normale" Vector (che per inciso sarebbe un Vector<Object>) Ciao |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:24.




















