Quote Originariamente inviata da LucaRocco Visualizza il messaggio
Come dovrei fare a Invocare il metodo? Il compilatore mi da un errore con l'eccezione. Il metodo si trova nella stessa classe.
Innanzitutto vedo che stai scrivendo un solo elemento ... non l'intero vettore. Come detto prima, puoi tranquillamente serializzare il vettore per intero, se il contenuto è serializzabile. Tieni presente che la serializzazione, di serie, non funziona in "append": tecnicamente è possibile creare il file, scrivere 1 oggetto, chiudere e poi successivamente riaprirlo in modalità "append" ed aggiungere un altro oggetto. Ma poi la de-serializzazione non funziona più poiché lo stream risulta "corrotto".
Detto in altro modo: il file lo devi sempre leggere tutto e riscrivere tutto.

Riguardo alle eccezioni, in Java le eccezioni sono "checked" o "unchecked". Per quelle checked (e IOException è una di queste) vale la regola che si dice "handle or declare". Il compilatore controlla e si assicura che le eccezioni checked non vengano mai ignorate dal programmatore, che deve per forza o gestirle (try-catch) o dichiararle nel metodo per fare in modo che possano uscire ed essere gestite più "a monte".

Nel tuo Backup() la IOException può uscire fuori ma essendo checked, il chiamante (chi chiama Backup() ) dovrà porsi la stessa questione: o la gestisce o la fa uscire ancora più a monte.

Un'ultima cosa: il tuo Backup sintatticamente/tecnicamente è ok ma non gestisce correttamente il close. Il close va sempre fatto ma se writeObject fallisce con una eccezione, il close nel tuo caso non viene fatto!
Quindi una versione più corretta è:

codice:
public void backup() throws IOException {
    FileOutputStream fos = new FileOutputStream("Backup.ser");
    ObjectOutputStream oos = null;

    try {
        oos = new ObjectOutputStream(fos);
        oos.writeObject(vet);
    } finally {
        try {
            if (oos != null) {
                oos.close();
            } else {
                fos.close();
            }
        } catch (IOException e) {
            // Niente di particolare da fare, al massimo un "log".
        }
    }
}

Sì .. è più lunga/rognosa ma così considera tutti i path "bad" che possono capitare. Questo vale per qualunque versione di Java. Si può accorciare molto se usi una nuova feature di Java 7 che è il try-with-resource (non so se lo conosci).