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

    Problemi scrittura oggetti in file binario..

    Ciao a tutti sono nuovo, programmo per la mia scuola (per ora)..
    comunque giungendo al punto ho riscontrato dei problemi con le classi ObjectInputStream e ObjectOutputStream...il contesto è una videoteca con cui scrivere/leggere su file binario oggetti che corrispondono ai film presenti.
    siccome questo tipo di classi non supporta bene la funzione di append, ci è stato detto che per l'aggiunta di un "film" bisogna riscrivere l'intero contenuto del file binario su uno di appoggio, scrivere l'oggetto da aggiungere e successivamente rinominare il file di appoggio come il sorgente e cancellare il sorgente...
    detto questo vi mostro un frammento di codice e vi spiego il problema:

    public String write (DVD ogg) {
    String error = "";
    try {
    fis = new FileInputStream ("films.dat");
    fos = new FileOutputStream ("appoggio.dat");

    in = new ObjectInputStream (fis);
    out = new ObjectOutputStream (fos);

    while (true) {
    try {
    out.writeObject ((DVD)in.readObject());
    } catch (EOFException eof) { break; }
    catch (IOException e) { error = "Errore lettura / scrittura file"; }
    catch (ClassNotFoundException cfe) {}
    }

    fis.close();
    in.close();

    out.writeObject (ogg);

    fos.close();
    out.close();

    File originale = new File ("films.dat");
    File nuovo = new File ("appoggio.dat");
    nuovo.renameTo (originale);
    originale.delete();
    } catch (IOException err) { error = "Errore riscontrato: Apertura/Chiusura Streams";
    System.out.println (err); }

    return error;
    }
    }

    inizialmente l'errore che mi risultava era FileNotFound...va bene, li creo io e poi ci penso dopo...Ora l'errore che trovo è EndOfFileException, ma come è possibile?? io uso la cattura di questo errore per terminare il ciclo di copia...non riesco a capire cosa non va..
    p.s. se vi state chiedendo a cosa serve la stringa error, mi serve per visualizzarla nell' interfaccia grafica.
    Aspetto con ansia vostre correzioni...grazie a tutti in anticipo

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

    Re: Problemi scrittura oggetti in file binario..

    Originariamente inviato da Skar91
    siccome questo tipo di classi non supporta bene la funzione di append
    Sì vero. Ma per una questione "concettuale" che riguarda il formato dei dati serializzati. Personalmente, ne avevo già parlato qui.

    Originariamente inviato da Skar91
    Ora l'errore che trovo è EndOfFileException, ma come è possibile?? io uso la cattura di questo errore per terminare il ciclo di copia...non riesco a capire cosa non va..
    Il catch di EOFException con dentro il break è corretto. Da dove la vedi questa eccezione?? Perché ovviamente ad un certo punto viene lanciata ... ma il tuo catch è "silenzioso" nel senso che non stampa nulla e fa solamente un break.


    P.S. Giusto per precisare: quando hai classi di I/O "wrappate" (avvolte) dentro altre classi di I/O, per chiudere basta invocare il close() sull'oggetto più esterno .... non su tutti quelli contenuti!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    è il catch finale (IOException) che mi stampa solamente : java.io.EOFException....non è il catch legato al ciclo...quello sembra funzionare bene..anche se alla fine controllando nel file binario non ci trovo scritto nulla...
    p.s. riguarda alla precisazione nei close dici che basta chiudere solo gli ObjectStreams??

  4. #4
    Cell'ho fatta... Il problema era nell'inizializzazione dell ObjectInputStream che a quanto pare non accetta file vuoti... ho messo un controllo sull'esistenza del file e ho diramato in due procedimenti per entrambi i casi...E' un operazione un po' lunga e rude, ma sembra funzionare bene, te la mostro... e se magari mi sai suggerire qualche scorciatoia, ben venga!!

    public String write (DVD ogg) {
    String error = "";

    File originale = new File ("films.dat");

    if ((originale.exists()) == false) {

    try {
    originale.createNewFile();
    fos = new FileOutputStream (originale);
    out = new ObjectOutputStream (fos);
    out.writeObject(ogg);
    out.close();
    } catch (IOException e) { error = "Errore scrittura file"; }

    } else {

    try {
    File nuovo = new File ("appoggio.dat");
    nuovo.createNewFile();

    fis = new FileInputStream (originale);
    fos = new FileOutputStream (nuovo);

    in = new ObjectInputStream (fis);
    out = new ObjectOutputStream (fos);

    while (true) {
    try {
    out.writeObject ((DVD)in.readObject());
    } catch (EOFException eof) { break; }
    catch (IOException e) { error = "Errore lettura / scrittura file"; }
    catch (ClassNotFoundException cfe) {}
    }

    in.close();
    out.writeObject (ogg);
    out.close();

    nuovo.renameTo (originale);
    originale.delete();

    } catch (IOException err) { error = "Errore riscontrato: Apertura/Chiusura Streams";
    System.out.println (err); }
    }
    return error;
    }

    che ne dici??

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.