Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [JAVA] Domanda Exceptions

    Col seguente codice leggo il contenuto di un file (in una lista).
    Voglio che ogni errore sia gestito dal metodo chiamante (e quindi non qui).

    codice:
    package mypackage.begin;
    
    import java.io.*;
    import java.util.*;
    
    public class ExceptionClass2 
        {
        public void myMethod2() throws Exception
            {   	
            List<String> lines = new ArrayList<String>();
            BufferedReader in = new BufferedReader(new FileReader("C:/my-file.txt"));            
            String str;
            while ((str = in.readLine())!=null) lines.add(str);          
            in.close();
            }
        }
    Non capisco però una cosa: se nel bel mezzo della lettura "succede qualcosa" che la interrompe, la riga in.close() rimane non eseguita.
    Il file rimane aperto?

  2. #2
    Si il file rimane aperto dovresti fare il try e catch chiudere il file e lanciare l'eccezione nel catch

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Ti ringrazio.
    Quindi nel caso di apertura risorse devo usare la seguente logica?

    codice:
    package mypackage.begin;
    
    import java.io.*;
    import java.util.*;
    
    public class ExceptionClass3 
        {
        public void myMethod3() throws Exception
            {
        	BufferedReader in = null;    	
        	try
        	    {
                List<String> lines = new ArrayList<String>();
                in = new BufferedReader(new FileReader("C:/my-file.txt"));            
                String str;
                while ((str = in.readLine())!=null) lines.add(str);
        	    }
        	
        	catch(Exception e) 
        	    {
        	    // Rilancio l'eccezione (che verrà gestita dal chiamante).
        	    throw new Exception();    		
        	    }
        	
        	finally
        	    {
                if (in!=null) in.close();            
                }
            }
        }
    E' ciò che si fa comunemente? E' una best practice?
    Grazie.

  4. #4
    si cosi è perfetto hai sempre la sicurezza che le risorse vengano chiuse

  5. #5
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Grazie ancora.

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    codice:
        public void myMethod3() throws Exception
            {
        	BufferedReader in = null;    	
        	try
        	    {
                List<String> lines = new ArrayList<String>();
                in = new BufferedReader(new FileReader("C:/my-file.txt"));            
                String str;
                while ((str = in.readLine())!=null) lines.add(str);
        	    }
        	finally
        	    {
                if (in!=null) in.close();            
                }
            }
    meglio così

  7. #7
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Così viene rilanciata automaticamente solo l'eccezione corretta?

    Tnx!

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    certo e poi il codice è più leggibile

  9. #9
    Puoi anche farti una classe exception personalizzata tipo

    codice:
    public class MyException extends Exception
    Dove poi ci metti dentro tutti i metodi e le info che vuoi...

    oppure, più figo ancora, puoi farti una classe personalizzata di eccezioni NON CONTROLLATE, per le quali non è obbligatorio il try-catch

    codice:
    public class MyException extends RuntimeException
    WWW.UTMIB.COM site and forum administrator
    www.utmib.com/forum
    Unreal Tournament Men In Black Clan

  10. #10
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Tra qualche mese, quando sarò più "compatibile" con Java...

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.