Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problemi riguardo lettura e scrittura su file

    Ciao a tutti, mi rivolgo a voi perché proprio non so più dove sbattere la testa. Io un file che contiene deu oggetti di classe Oggetto e poi ho 2 file, uno per scrivere sul e l'altro per leggere dai file. Solo che mi dice, in fase di lettura, che non può leggere gli oggetti dal file!

    Vi metto qui il codice, è semplice ed intuibile:

    CLASSE: OGGETTO
    codice:
    import java.io.*;
    import java.util.*;
    
    public class Oggetto implements Serializable
    {
    	
    	int numero = 4;
    
    	public Oggetto()
    	{
    		numero = numero + 3;
    	}
    	
    	public void descrivi()
    	{
    		System.out.println("Il numero vale: " + numero);
    	}
    	
    	public static void main(String arg[]) 
    	{
    		/*
    		try
    		{
    			Oggetto ogg1 = new Oggetto();
    			Oggetto ogg2 = new Oggetto();
    			ScriviSuFile scrittore = new ScriviSuFile("DATI", "dat", false);
    			scrittore.scriviOggetto("DATI", "dat", true, ogg1);
    			scrittore.scriviOggetto("DATI", "dat", true, ogg2);
    		} catch(Throwable e) { System.out.println("ERRORE!"); }
    		*/
    		try
    		{
    			LeggiDaFile lettore = new LeggiDaFile("DATI", "dat");
    			Oggetto ogg1 = (Oggetto)(lettore.leggiOggetto("DATI", "dat"));
    			Oggetto ogg2 = (Oggetto)(lettore.leggiOggetto("DATI", "dat"));
    			ogg1.descrivi();
    			ogg2.descrivi();
    		} catch(Throwable e) { System.out.println("ERRORE!"); }
    	}
    	
    	
    }

    CLASSE: ScriviSuFile
    codice:
    import java.io.*;
    import java.util.*;
    
    public class ScriviSuFile implements Serializable
    {	
    	public ScriviSuFile(String NOME_FILE, String ESTENSIONE, boolean append)
    	{
    		try 
    		{
    			FileOutputStream out;
    			ObjectOutputStream s;
    			out = new FileOutputStream(NOME_FILE + "." + ESTENSIONE, append);
    			s = new ObjectOutputStream(out);
    		} catch (Throwable e) { System.out.println("Errore di apertura del flusso di dati"); }
    	}
    	
    	public void scriviOggetto(String NOME_FILE, String ESTENSIONE, boolean append, Object oggetto)
    	{
    		try 
    		{
    			FileOutputStream out;
    			ObjectOutputStream s;
    			out = new FileOutputStream(NOME_FILE + "." + ESTENSIONE, append);
    			s = new ObjectOutputStream(out);
    			s.writeObject(oggetto);
    			s.close();
    		} catch (Throwable e) { System.out.println("Errore di scrittura dei dati"); }
    	}
    	
    }

    CLASSE: LeggiDaFile
    codice:
    import java.io.*;
    import java.util.*;
    
    public class LeggiDaFile implements Serializable
    {	
    	public LeggiDaFile(String NOME_FILE, String ESTENSIONE)
    	{
    		try 
    		{
    			FileInputStream file; 
    			ObjectInputStream in; 
    			file = new FileInputStream(NOME_FILE + "." + ESTENSIONE);
    			in = new ObjectInputStream(file);
    		} catch (Throwable e) { System.out.println("Errore di apertura del flusso di dati"); }
    	}
    	
    	public Object leggiOggetto(String NOME_FILE, String ESTENSIONE)
    	{
    		Object oggetto = new Object();
    		try 
    		{
    			FileInputStream file; 
    			ObjectInputStream in; 
    			file = new FileInputStream(NOME_FILE + "." + ESTENSIONE);
    			in = new ObjectInputStream(file);
    			oggetto =(Object)(in.readObject());
    			in.close();
    		} catch (Throwable e) { System.out.println("Errore di lettura dei dati"); }
    		return oggetto;
    	}
    	
    }
    Mi potete dire dove sbaglio??? Vi ringrazio di cuore! =)
    Ps: provate a creare due oggetti, a scriverli su file e dopo vedere se vengono letti entrambi. Grazie!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problemi riguardo lettura e scrittura su file

    Originariamente inviato da Power Dragon
    Mi potete dire dove sbaglio???
    Hai usato il costruttore di FileOutputStream con il flag di append a true. Ebbene, la serializzazione non funziona in "append"!

    La spiegazione lunga di questa questione l'avevo fatta in questo post.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Innanzitutto ti ringrazio ancora per la tua spiegazioe e per il link dell'altro post: ora ho capito perché non posso mettere in appendo.
    Però ora mi sorge un altro problema: io ho un piccolo programma dove devo salvare le sale di un museo, secondo questo schema:
    SALA:
    # Nome
    # Descrizione
    # Superficie
    # Vector di <Opera>

    dove Opera è una classe, e il vector raccoglie degli oggetti (di tipo Opera appunto)
    OPERA
    # Nome
    # Autore
    # Anno

    Siccome nel mio progetto devo salvare più sale del mio museo (quindi anche più vector) e poi, all'avvio del mio programma devo ricaricare le sale (e i vector<Opera>), come mi consigli di fare?

    Grazie ancora per l'aiuto!
    PS: non esiste da qualche parte una classe per la lettura e scrittura dei dati già pronta? :master:

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.