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

    lettura e scrittura eccezione

    Questo è il mio codice:
    codice:
    import java.io.*;public class main1 {
    	public static void main (String[]args){
    		File file1=new File("prova.txt");
    		BufferedWriter scrittore=null;
    		try{
    			if(file1.createNewFile()){
    				scrittore=new BufferedWriter(new FileWriter(file1));
    				scrittore.write("ciao");
    				scrittore.newLine();
    				scrittore.write("a tutti");
    			}
    			
    			
    //----------------------------------------------------------------------------\\			
    			
    			BufferedReader lettore=null;
    			String frase=null;
    			file1=new File("prova.txt");
    			try{
    				lettore=new BufferedReader(new FileReader(file1));
    				while((frase=lettore.readLine())!=null){
    					System.out.println(frase);
    				}
    			}
    			catch(IOException e){}
    			finally{lettore.close();}
    		}
    		catch(IOException e){}
    		finally{try{scrittore.close();}catch(IOException e){e.printStackTrace();}}
    
    
    	}
    }
    questo è l'errore che si genera
    codice HTML:
    ciaoException in thread "main" a tuttijava.lang.NullPointerException	at main1.main(main1.java:30)
    Avete delle possibili soluzioni?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    1) Prima di poter aprire il file in lettura e quindi leggerlo è necessario chiuderlo, di modo che i dati vengano scritti su disco (un flush() prima della chiusura non fa male ed è consigliabile in situazioni dove viene usata la bufferizzazione).

    2) Le eccezioni non vanno ammazzate: stampane sempre lo stackTrace:

    codice:
    } catch (Exception e) {
       e.printStackTrace();
    }

    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

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    1) Prima di poter aprire il file in lettura e quindi leggerlo è necessario chiuderlo, di modo che i dati vengano scritti su disco (un flush() prima della chiusura non fa male ed è consigliabile in situazioni dove viene usata la bufferizzazione).

    2) Le eccezioni non vanno ammazzate: stampane sempre lo stackTrace:

    codice:
    } catch (Exception e) {
       e.printStackTrace();
    }

    Ciao.
    Ciao Grazie della risposta,
    il file viene chiuso e scritto nel finally per sicurezza ho provato a metterlo anche prima, il flush() lo ho provato la stampa dello stack la avevo provata per vedere se mi dava delle info in piu. il problema persiste anche con le soluzioni da te proposte.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Oltre a quanto correttamente già detto da LeleFT, aggiungo che non è completamente corretto fare quel:

    finally{lettore.close();}

    Infatti il costruttore di FileReader può fallire con eccezione e in tal caso lettore resta a null e quindi nel finally ottieni un "bel" NullPointerException.

    Pertanto o nel finally fai un test per vedere se lettore non è null ... oppure giri diversamente il try-catch-finally così:

    codice:
    BufferedReader lettore=new BufferedReader(new FileReader(file1));
    
    try {
        // .....
    } catch ( ......... ) {
        // ....
    } finally {
        lettore.close();
    }

    Questo tra l'altro puoi farlo proprio perché hai un ulteriore try-catch più "a monte"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    No, nel tuo codice il file viene chiuso DOPO che hai già cercato di leggerlo: il primo blocco try/catch racchiude al suo interno anche la lettura.

    Prova a vedere questo:

    codice:
    import java.io.*;
    
    public class Main1 {
        public static void main (String[]args){
            File file1 = new File("prova.txt");
            boolean leggi = false;
            FileWriter fw = null;
            BufferedWriter scrittore = null;
            try{
                fw = new FileWriter( file1 );
                scrittore = new BufferedWriter( fw );
                scrittore.write("ciao");
                scrittore.newLine();
                scrittore.write("a tutti");
                scrittore.flush();
                leggi = true;   // Indico al programma che la scrittura è andata a buon fine
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // Qui viene fatta la chiusura di tutti gli oggetti di scrittura
                if (scrittore != null) {
                    try { scrittore.close(); } catch (Exception e) { /* Inutile stampare lo stackTrace qui */ }
                } else {
                    if (fw != null) {
                       try { fw.close(); } catch (Exception e) { }
                    }
                }
            }
    
            if ( leggi ) {   
               // Posso leggere perchè la scrittura è andata a buon fine
               FileReader fr = null;
               BufferedReader lettore = null;
               String frase=null;
               try {
                   fr = new FileReader( file1 );
                   lettore = new BufferedReader( fr );
                   while((frase=lettore.readLine()) != null) {
                       System.out.println( frase );
                   }
               } catch(IOException e){
                   e.printStackTrace();
               } finally {
                   if (lettore != null) {
                       try { lettore.close(); } catch (Exception e) { }
                   } else {
                       if (fr != null) {
                           try { fr.close(); } catch (Exception e) { }
                       }
                   }
               }
            }
        }
    }

    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

  6. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Oltre a quanto correttamente già detto da LeleFT, aggiungo che non è completamente corretto fare quel:

    finally{lettore.close();}

    Infatti il costruttore di FileReader può fallire con eccezione e in tal caso lettore resta a null e quindi nel finally ottieni un "bel" NullPointerException.

    Pertanto o nel finally fai un test per vedere se lettore non è null ... oppure giri diversamente il try-catch-finally così:

    codice:
    BufferedReader lettore=new BufferedReader(new FileReader(file1));
    
    try {
        // .....
    } catch ( ......... ) {
        // ....
    } finally {
        lettore.close();
    }

    Questo tra l'altro puoi farlo proprio perché hai un ulteriore try-catch più "a monte"
    grazie, della risposta infatti ho messo il .close() in un altro try ho trovato l'errore adesso mando il codice corretto

  7. #7
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    No, nel tuo codice il file viene chiuso DOPO che hai già cercato di leggerlo: il primo blocco try/catch racchiude al suo interno anche la lettura.

    Prova a vedere questo:

    codice:
    import java.io.*;
    
    public class Main1 {
        public static void main (String[]args){
            File file1 = new File("prova.txt");
            boolean leggi = false;
            FileWriter fw = null;
            BufferedWriter scrittore = null;
            try{
                fw = new FileWriter( file1 );
                scrittore = new BufferedWriter( fw );
                scrittore.write("ciao");
                scrittore.newLine();
                scrittore.write("a tutti");
                scrittore.flush();
                leggi = true;   // Indico al programma che la scrittura è andata a buon fine
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // Qui viene fatta la chiusura di tutti gli oggetti di scrittura
                if (scrittore != null) {
                    try { scrittore.close(); } catch (Exception e) { /* Inutile stampare lo stackTrace qui */ }
                } else {
                    if (fw != null) {
                       try { fw.close(); } catch (Exception e) { }
                    }
                }
            }
    
            if ( leggi ) {   
               // Posso leggere perchè la scrittura è andata a buon fine
               FileReader fr = null;
               BufferedReader lettore = null;
               String frase=null;
               try {
                   fr = new FileReader( file1 );
                   lettore = new BufferedReader( fr );
                   while((frase=lettore.readLine()) != null) {
                       System.out.println( frase );
                   }
               } catch(IOException e){
                   e.printStackTrace();
               } finally {
                   if (lettore != null) {
                       try { lettore.close(); } catch (Exception e) { }
                   } else {
                       if (fr != null) {
                           try { fr.close(); } catch (Exception e) { }
                       }
                   }
               }
            }
        }
    }

    Ciao.
    ciao grazie della risposta questa è la soluzione che ho applicato e sembra funzionare
    codice:
    import java.io.*;public class main1 {
    	public static void main (String[]args){
    		File file1=new File("prova.txt");
    		BufferedWriter scrittore=null;
    		try{
    			if(file1.createNewFile()){
    				scrittore=new BufferedWriter(new FileWriter(file1));
    				scrittore.write("ciao");
    				scrittore.newLine();
    				scrittore.write("a tutti");
    				scrittore.close();
    			}
    			
    			
    //----------------------------------------------------------------------------\\			
    			
    			BufferedReader lettore=null;
    			String frase=null;
    			file1=new File("prova.txt");
    			try{
    				lettore=new BufferedReader(new FileReader(file1));
    				while((frase=lettore.readLine())!=null){
    					System.out.println(frase);
    				}
    			}
    			catch(IOException e){e.printStackTrace();}
    			finally{lettore.close();}
    		}
    		catch(IOException e){e.printStackTrace();}
    		
    
    
    	}
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.