Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    12

    ObjectInputStream dove sbaglio?

    Salve a tutti, ho un problema con un esercizio di java.

    l'esercizio mi chiede di scrivere un oggetto della classe Persona su un file di testo
    e rileggerlo.

    L'oggetto viene scritto correttamente visto che il programma non incappa in nessuna eccezione,
    però quando vado a rileggerlo non mi fa leggere l'oggetto ma solo un riferimento

    questo è loutput programma :

    Il file registrazione è stato scritto con successo!
    Ora verrà riaperto il file per mostrare le persone:
    Persona@232204a1

    questa è la classe persona http://pastebin.com/nPqLxapN
    mentre questa è la classe main http://pastebin.com/keaj1r4m

    cosa sbaglio?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Chaosweb Visualizza il messaggio
    l'esercizio mi chiede di scrivere un oggetto della classe Persona su un file di testo
    Solo una piccola nota: la serializzazione degli oggetti si basa su uno stream di dati binario secondo un ben preciso protocollo. Quindi il file non è definibile "di testo" (e non è leggibile con normali editor testuali).

    Quote Originariamente inviata da Chaosweb Visualizza il messaggio
    Ora verrà riaperto il file per mostrare le persone:
    Persona@232204a1
    Questo non centra nulla, di per sé, con la serializzazione. Questa forma è semplicemente quella fornita dal toString() "ereditato" da Object. Nella tua classe devi solo ridefinire il toString() per fornire la descrizione dell'oggetto come vuoi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    mi potete dire perche non melo stampa sulla console gli oggetti che li carico da file primo_file.dat, alla fine del programma mi stampa : error nel spertura di file
    // classe people
    package person;

    imprt java.io.Serializable;
    public class people implements Serializable{
    protected String name;
    protected String surname;
    protected int age;
    protected String address;

    public people(String nome, String cognome, int eta){
    this.name = new String(nome);
    this.surname = new String(cognome);
    this.age = eta;
    }

    public void adress(String indirizzo){
    this.address = new String(indirizzo);
    }
    public void stampaPeople(){
    System.out.println("nome: " + this.name + " cognome: " + this.surname + " la sua eta: " + this.age + " il suo indirizzo: " + this.address);
    }
    public String toString(){
    return this.name + this.surname + this.age + this.address;
    }
    }

    // classe student
    package person;
    import java.io.Serializable;
    public class student extends people implements Serializable{
    protected int matricola;
    protected String facolta;
    protected String corso;
    protected int year;



    public student (String nome, String cognome, int eta, int mat){
    super(nome,cognome,eta);
    this.matricola= mat;

    }

    public void infoCorso(String fac, String cor, int anno){
    this.facolta = new String(fac);
    this.corso = new String(cor);
    this.year = anno;
    }

    public void stampaStudent(){
    super.stampaPeople();
    System.out.println( "la matricola del studente : "+ this.matricola + "\n fa il corso: "+
    this.corso + " della sua facolta: "+ this.facolta + " \nl'anno del corso: "+ this.year );

    }

    public String toString(){
    return super.toString() + this.matricola + this.facolta + this.corso + this.year;
    }

    }
    //classe readfile
    package person;
    import java.io.*;
    import java.util.ArrayList;
    public class readFile {


    protected File f;

    public readFile(String name){
    this.f = new File(name);

    }

    public ArrayList <student> letturaFile(){
    ArrayList <student> stu = new ArrayList<student>();

    try{
    student s;
    FileInputStream fis = new FileInputStream(this.f);
    ObjectInputStream ois = new ObjectInputStream(fis);


    while((s=(student)ois.readObject()) !=null){
    s.stampaStudent();
    stu.add(s);
    }
    ois.close();
    fis.close();
    }
    catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    catch(IOException e){
    System.out.println("errore nel apertura di file");
    }
    return stu;
    }
    }

    // clase writefile
    package person;
    import java.io.*;
    import java.util.ArrayList;
    public class writeFile {

    File f;

    public writeFile(String name){
    this.f = new File(name);
    }

    public void insertOutput(ArrayList<student> stu){
    try{
    FileOutputStream fs = new FileOutputStream(this.f);
    //DataOutputStream dos = new DataOutputStream(fs);
    ObjectOutputStream oos = new ObjectOutputStream(fs);
    for (student temp : stu){
    oos.writeObject(temp);
    }

    oos.close();
    fs.close();
    }
    catch(IOException e){
    System.out.println("errore di scrittura nel file:"+ this.f.getName());
    }

    }
    public void insertOutput(student s){
    try{
    FileOutputStream fs = new FileOutputStream(this.f);
    //DataOutputStream dos = new DataOutputStream(fs);
    ObjectOutputStream oos = new ObjectOutputStream(fs);
    oos.writeObject(s);
    oos.close();
    fs.close();
    }
    catch(IOException e){
    System.out.println("errore di scrittura nel file:"+ this.f.getName());
    }

    }

    }

    //classe main
    package person;
    import java.util.ArrayList;
    import java.util.Scanner;
    public class mainClass {


    public static void main(String args[]){

    /* Scanner scan = new Scanner(System.in);
    ArrayList <student> stu = new ArrayList <student>();
    for ( int i =0; i < 3; i++){
    String tempNome, tempCognome;
    int tempEta, tempMat;
    System.out.println("inseriisci nel ordine nome cognome eta mat: ");
    tempNome =scan.nextLine();
    tempCognome = scan.nextLine();
    tempEta= scan.nextInt();
    tempMat = scan.nextInt();
    student temp = new student(tempNome, tempCognome, tempEta, tempMat);

    System.out.println("inserisic informazione del corso nel ordine: facolta, corso ,anno: ");
    String tempFac =new String();
    String tempCor = new String();
    tempFac = scan.nextLine();
    scan.nextLine();
    tempCor = scan.nextLine();
    int tempAnno;
    tempAnno = scan.nextInt();
    scan.nextLine();
    temp.infoCorso(tempFac, tempCor, tempAnno);

    System.out.println("inserisci indirizzo del studente : ");
    String tempAdre;
    tempAdre = scan.nextLine();
    temp.adress(tempAdre);
    stu.add(temp);
    }

    for (student item : stu){
    item.stampaStudent();
    }
    writeFile wf = new writeFile("/home/neptune/Scrivania/primo_file.dat");
    wf.insertOutput(stu);
    */
    ArrayList <student> stu = new ArrayList<student>();
    readFile rf = new readFile("/home/neptune/Scrivania/primo_file.dat");
    stu=rf.letturaFile();
    for (student item : stu){
    item.stampaStudent();
    }

    }
    }
    Ultima modifica di superPoseidon; 27-09-2014 a 18:21 Motivo: funziona tutto perfettamente

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da superPoseidon Visualizza il messaggio
    mi potete dire perche non melo stampa sulla console gli oggetti che li carico da file primo_file.dat, alla fine del programma mi stampa : error nel spertura di file
    Il primo e più evidente problema: readObject non ti restituisce null per indicare "fine del file" (cioè nessun altro oggetto).

    Inoltre il tuo codice mostra parecchie mancanze a livello di stile di scrittura, denominazioni, gestione delle eccezioni, ecc...
    Capisco che magari è uno dei tuoi primi programmini ... che sei all'inizio .... che è da poco che studi Java .... va bene, ok ma dovresti cercare di apprendere un po' di concetti, prima della serializzazione degli oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.