Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Java PROBLEMA NEL CARICA FILE

    Ciao a tutti, ahimè sono ancora qua...
    Non riesco a caricare un file, che è stato salvato correttamente.
    Mando in seguito il codice per il salvataggio del file (Che è funzionante) e quello del caricamento che non funziona:
    Il mio intento è salvare in un oggetto di tipo Book, cosi dichiarato:
    Book[] libro = new Book[50];

    SALVA:

    codice:
    FileOutputStream f_out = null;try{
                                        f_out = new FileOutputStream(txt_file.getText());
                                        for(int i=0;i<dim_book;i++){
                                            f_out.write(libro[i].Titolo.getBytes());
                                            f_out.write(" ".getBytes());
                                            f_out.write(libro[i].Autore.getBytes());
                                            f_out.write(" ".getBytes());
                                            f_out.write(libro[i].Anno.getBytes());
                                            f_out.write(" ".getBytes());
                                            f_out.write(libro[i].Percorso.getBytes());
                                            f_out.write(" ".getBytes());
                                            f_out.write(libro[i].numpag.getBytes());
                                            f_out.write("\n\r".getBytes());
                                        }
                                        f_out.flush();
                                        f_out.close();
                                        JOptionPane.showMessageDialog(f_main, "Salvataggio avvenuto con successo.");
                                        grafica_Panel();
                                        
                                    }
                                    catch(IOException ex){
                                        JOptionPane.showMessageDialog(f_main, "Errore salvataggio file.");
                                    }

    CARICA:

    codice:
    FileInputStream f_in = null;
    try{
                                        f_in = new FileInputStream(txt_file.getText());
                                        for(int i=0;i<3;i++){
                                            f_in.read(libro[i].Titolo.getBytes());
                                            f_in.read(libro[i].Autore.getBytes());
                                            f_in.read(libro[i].Anno.getBytes());
                                            f_in.read(libro[i].Percorso.getBytes());
                                            f_in.read(libro[i].numpag.getBytes());
                                        }    
                                    
                                        f_in.close();
                                    }
                                    catch(IOException ex){
                                        JOptionPane.showMessageDialog(f_main, "Errore caricamento file.");
                                    }

    Non mi segnala errori di compilazione, ma quando eseguo e provo a fare una stampa del vettore libro, mi da un "java.lang.NullPointerException" poichè probabilmente accedo ad un area di libro che non contiene quello desiderato.

    Sò che il carica è sbagliato..ma non so proprio dove buttare la testa

    Aiutooo
    Ultima modifica di LeleFT; 16-01-2015 a 11:05 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da marco1462 Visualizza il messaggio
    Non mi segnala errori di compilazione, ma quando eseguo e provo a fare una stampa del vettore libro, mi da un "java.lang.NullPointerException" poichè probabilmente accedo ad un area di libro che non contiene quello desiderato.
    Hai postato poco codice .... bisognerebbe vedere il resto.

    E comunque fare f_out.write(libro[i].Titolo.getBytes()); tecnicamente ha senso e funziona (scrivi sul FileOutputStream i byte della stringa) ma fare f_in.read(libro[i].Titolo.getBytes()); NON ha assolutamente alcun senso.

    Quindi sarebbe un po' tutto da rivedere ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Libro è un oggetto dichiarato Book che ha 5 stringhe: Titolo, Autore, Anno,num pagine, percorso.
    Le stampa le ho fatte solo per vedere se il carica funzionava: System.out.println(libro[0].Titolo) e qua mi segnala il "java.lang.NullPointerException".
    Ho problemi proprio nel carica in un array..

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Book[] libro = new Book[50];

    Questa istruzione crea un array in grado di contenere 50 oggetti Book. Nessuna delle posizioni contiene ancora alcunché.

    Da qui la NullPointerException.

    Se vuoi usare la posizione 0, allora dovrai prima assegnargli un oggetto Book:

    libro[0] = new Book( ... ); // al posto dei puntini vanno passati gli eventuali parametri (se necessario)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Book[] libro = new Book[50];

    Questa istruzione crea un array in grado di contenere 50 oggetti Book. Nessuna delle posizioni contiene ancora alcunché.

    Da qui la NullPointerException.

    Se vuoi usare la posizione 0, allora dovrai prima assegnargli un oggetto Book:

    libro[0] = new Book( ... ); // al posto dei puntini vanno passati gli eventuali parametri (se necessario)


    Ciao.
    Ma questo solo se la carica funziona correttamente, giusto?

    codice:
    codice:
    FileInputStream f_in =null;
    try{
                                        f_in =newFileInputStream(txt_file.getText());
                                        for(int i=0;i<3;i++){
                                            f_in.read(libro[i].Titolo.getBytes());
                                            f_in.read(libro[i].Autore.getBytes());
                                            f_in.read(libro[i].Anno.getBytes());
                                            f_in.read(libro[i].Percorso.getBytes());
                                            f_in.read(libro[i].numpag.getBytes());
                                        }    
                                    
                                        f_in.close();
                                    }
                                    catch(IOException ex){
                                        JOptionPane.showMessageDialog(f_main,"Errore caricamento file.");
                                    }
    Non sò proprio dove battere la testa per la carica Quella li che ho provato a fare è imbarazzante...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da marco1462 Visualizza il messaggio
    Non sò proprio dove battere la testa per la carica Quella li che ho provato a fare è imbarazzante...
    Sì ... un pochino "imbarazzante", perché come ti ho detto prima, f_in.read(libro[i].Titolo.getBytes()); NON ha assolutamente alcun senso e non fa minimamente quello che (forse) ti stavi aspettando.

    Stai gestendo file "di testo", domanda: devi per forza usare FileOutputStream/FileInputStream? Perché non sono effettivamente i più appropriati per file di testo ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Eh..ahimè è un progetto, e ha lezione abbiamo visto solo FileOutputStream e FileInputStream...
    Deve funzionare sia su file di testo che file di dati.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da marco1462 Visualizza il messaggio
    Deve funzionare sia su file di testo che file di dati.
    Che vuol dire!? Un file o è "binario" o è "di testo". E quale dei due lo devi/puoi scegliere tu in base alle esigenze. E in entrambi i casi c'è da valutare il formato delle informazioni memorizzate.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Esatto, con f_in =newFileInputStream(txt_file.getText()) scelgo se creare un file.dat o file.txt
    Ma il problema non cambia, devo sempre gestire correttamente il carica, chiedevo un aiuto su questo

  10. #10
    Quote Originariamente inviata da marco1462 Visualizza il messaggio
    Esatto, con f_in =newFileInputStream(txt_file.getText()) scelgo se creare un file.dat o file.txt
    Ma il problema non cambia, devo sempre gestire correttamente il carica, chiedevo un aiuto su questo
    Attenzione non è che se salvi su un file .txt vuol dire che per forza devi scrivere sotto forma di testo, nessuno ti vieta di scrivere dati binari.
    Cioè il concetto non è l'estensione del file che ti obbliga a scrivere in un modo o in un altro.

    P.S
    gli underscore in java non si possono assolutamente vedere. In java si usa, da convezione, la nomenclatura camelCase.

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.