FileNotFoundException in Java

1. Introduzione

In questo articolo, parleremo di un'eccezione molto comune in Java: FileNotFoundException .

Tratteremo i casi in cui può verificarsi, i possibili modi per trattarlo e alcuni esempi.

2. Quando viene generata l'eccezione?

Come indicato nella documentazione API di Java, questa eccezione può essere generata quando:

  • Un file con il percorso specificato non non esiste
  • Un file con il percorso specificato non esistono , ma è inaccessibile per qualche motivo (la scrittura richiesta per un file di sola lettura, o permessi non permettono l'accesso al file)

3. Come gestirlo?

Prima di tutto, tenendo conto del fatto che estende java.io.IOException che estende java.lang.Exception , dovrai gestirlo con un blocco try-catch come con qualsiasi altra Eccezione controllata .

Quindi, cosa fare (relativo al business / alla logica) all'interno del blocco try-catch dipende effettivamente da ciò che è necessario fare.

Potrebbe essere necessario:

  • Crea un'eccezione specifica per l'azienda: potrebbe trattarsi di un errore di interruzione dell'esecuzione, ma lascerai la decisione nei livelli superiori dell'applicazione (non dimenticare di includere l'eccezione originale)
  • Avvisa un utente con un dialogo o un messaggio di errore: questo non è un errore di interruzione dell'esecuzione, quindi è sufficiente una semplice notifica
  • Creare un file: leggere un file di configurazione opzionale, non trovarlo e crearne uno nuovo con i valori di default
  • Crea un file in un altro percorso: devi scrivere qualcosa e se il primo percorso non è disponibile, prova con uno a prova di errore
  • Basta registrare un errore: questo errore non dovrebbe interrompere l'esecuzione ma lo si registra per analisi future

4. Esempi

Ora vedremo alcuni esempi, tutti basati sulla seguente classe di test:

public class FileNotFoundExceptionTest { private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); private String fileName = Double.toString(Math.random()); protected void readFailingFile() throws IOException { BufferedReader rd = new BufferedReader(new FileReader(new File(fileName))); rd.readLine(); // no need to close file } class BusinessException extends RuntimeException { public BusinessException(String string, FileNotFoundException ex) { super(string, ex); } } }

4.1. Registrazione dell'eccezione

Se esegui il codice seguente, verrà "registrato" l'errore nella console:

@Test public void logError() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { LOG.error("Optional file " + fileName + " was not found.", ex); } }

4.2. Generazione di un'eccezione specifica per l'azienda

Successivamente, un esempio di generazione di un'eccezione specifica per l'azienda in modo che l'errore possa essere gestito nei livelli superiori:

@Test(expected = BusinessException.class) public void raiseBusinessSpecificException() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { throw new BusinessException( "BusinessException: necessary file was not present.", ex); } }

4.3. Creazione di un file

Infine, proveremo a creare il file in modo che possa essere letto (magari per un thread che sta leggendo continuamente un file), ma ancora una volta catturando l'eccezione e gestendo l'eventuale secondo errore:

@Test public void createFile() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { try { new File(fileName).createNewFile(); readFailingFile(); } catch (IOException ioe) { throw new RuntimeException( "BusinessException: even creation is not possible.", ioe); } } }

5. conclusione

In questo breve articolo, abbiamo visto quando può verificarsi un'eccezione FileNotFoundException e diverse opzioni per gestirla.

Come sempre, gli esempi completi sono finiti su Github.