Newsgroup: it.comp.java
Titolo: FileInputStream (newbie)

Ciao,
oggi mi sono messo a fare delle prove per il salvataggio dei dati.
Purtroppo sto sbagliando qualcosa
infatti compilando mi dice:
C:\temp\Test1\src\Test1.java:24: unreported exception 
java.lang.ClassNotFoundException; must be caught or declared to be 
thrown
                        oRuote = (clRuote) p.readObject();
Il mio progetto è composto da 2 file:
Test1.java
clRuote.java
che ho riportato di seguito.
Non capisco dove sia il mio errore...
//////// file Test1.java
import java.util.*;
import java.io.*;
public class Test1
implements Serializable
 {
    private static clRuote oRuote;
    public static void main(String[] args) {
        System.out.println("Ciao, programma di test");
        try {
            FileInputStream istream = new FileInputStream("Ruote.txt");
            ObjectInputStream p = new ObjectInputStream(istream);
            oRuote = (clRuote) p.readObject();
            istream.close();
        }
        catch(IOException e){
            System.out.print("Errore leggendo");
            clRuote oRuote = new clRuote();
            oRuote.clRuote();
        }
        System.out.print("Estrazioni del "+ oRuote.DataEstrazione +"\n  
 Bari " + oRuote.Bari[0]);
        for (int x=1; x<5; x++){
            System.out.print("," + oRuote.Bari[x] );
            if (x==4){
                System.out.print("\n");
            }
        }
        try {
            FileOutputStream ostream = new 
FileOutputStream("Ruote.txt");
            ObjectOutputStream p = new ObjectOutputStream(ostream);
            p.writeObject(oRuote);
            p.flush();
            ostream.close();
        }
        catch(IOException e){
            System.out.println("errore scrivendo");
        }
    }
}
//////// file clRuote.java
import java.util.*;
import java.io.*;
public class clRuote
implements Serializable
{
    public int[] Bari;
    public Date DataEstrazione;
    public void clRuote(){
        DataEstrazione = new Date();
        Bari = new int[5];
        Bari[0] = 1;
        Bari[1] = 2;
        Bari[2] = 3;
        Bari[3] = 4;
        Bari[4] = 5;
    }
}
-- 
-------
Roberto

 
Come ti dice l'errore stesso, non gestisci l'eccezione 
ClassNotFoundException quando fai la readObject(). In poche parole, quando 
leggi un oggetto da un file attraverso questo metodo, non sei sicuro al 
100% che la classe a cui stai castando (in questo caso clRuote) esista, per 
i più svariati motivi. In questo caso, allora, viene sollevata un'eccezione 
ClassNotFoundException che devi gestire in qualche modo. Modificando la tua 
classe test, hai due soluzioni (riporto solo la parte interessata del 
main):
-----SOLUZIONE 1-----
    public static void main(String[] args) {
        System.out.println("Ciao, programma di test");
        try {
            FileInputStream istream = new FileInputStream("Ruote.txt");
            ObjectInputStream p = new ObjectInputStream(istream);
            oRuote = (clRuote) p.readObject();
            istream.close();
        }
        catch(IOException e){
            System.out.print("Errore leggendo");
            clRuote oRuote = new clRuote();
            oRuote.clRuote();
        }
    	   catch(ClassNotFoundException e){
    	    	 System.out.println("Classe non trovata! Non posso far nulla!");
    	    	 return;
    	   }
-----SOLUZIONE 2-----
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println("Ciao, programma di test");
        try {
            FileInputStream istream = new FileInputStream("Ruote.txt");
            ObjectInputStream p = new ObjectInputStream(istream);
            oRuote = (clRuote) p.readObject();
            istream.close();
        }
        catch(IOException e){
            System.out.print("Errore leggendo");
            clRuote oRuote = new clRuote();
            oRuote.clRuote();
        }
Nella soluzione 1 catturi e gestisci te l'eccezione nel modo che 
preferisci. Nella seconda soluzione, se si scatena l'eccezione viene 
rilanciata dal main al metodo che l'ha chiamato, in questo caso la Virtual 
Machine, e viene gestita all'esterno del tuo metodo!
Ciao.
-- 
Due stringhe entrano in un bar. La prima dice al barista: "Barista, dammi 
una birra.u.5n$x5t?*&4ru!2[sACC~ErJ". E la seconda: "Perdoni il mio amico, 
non ha il terminatore NULL"

 Machine, e viene gestita all'esterno del tuo metodo!
grazie 1000 adesso mi è molto più chiaro il discorso delle eccezzioni.
sto seguendo il videocorso java di nettuno, ma a dire il vero non mi 
sembra fatto molto bene e lo stesso insegnante non prevede molte cose e 
il codice che scrive non va sempre bene (vedi questo esempio) :)
cmq grazie.
Adesso sto integrando anche con un libro "introduzione alla 
programmazione con il linguaggio java" collana FrancoAngeli 
consigliatomi da un tipo che ha fatto ingegneria e mi sembra un libro 
fatto bene.
grazie ancora
-- 
-------
Roberto