2014-12-11 21 views
9

Ho notato un'altra eccezione Java per indicare che il file non esiste - NoSuchFileException. Sono stato incaricato di refactoring una certa api che getta entrambi di questi metodi diversi e vorrei usare solo uno.FileNotFoundException vs. NoSuchFileException

Devo mappare NoSuchFileException su file a FileNotFoundException? Devo usare NoSuchFileException invece di FileNotFoudnException perché è più specifico?

MODIFICA: aggiornata la domanda. Ho letto la documentazione prima di pubblicare questa domanda e conosco la differenza fondamentale. Speravo di ottenere ulteriori informazioni e la guida in questo caso poiché la gestione delle eccezioni per tipo è importante per i client dell'api del servizio e vorrei evitare il caso in cui è necessario eseguire il controllo per entrambi i tipi di eccezione.

+2

Hai letto le specifiche per loro? –

+1

L'eccezione Java 7 NoSuchFileException viene utilizzata solo quando il file richiesto non esiste; la versione precedente FileNotFoundException è stata utilizzata per questo e anche per i casi in cui il file esiste ma non è possibile accedervi per qualche motivo. –

+0

Uno è per l'uso con la classe File; l'altro è per l'uso con la classe Path. I loro pacchetti avrebbero dovuto chiarirlo. Nota che non dovresti prendere nessuna di queste eccezioni; dovresti controllare l'esistenza/leggibilità di un file prima di tentare di leggerlo. – VGR

risposta

4

A differenza di NoSuchFileException, FileNotFoundException non significa necessariamente che il file non esiste, potrebbe semplicemente essere inaccessibile. A parte questo, non sono sicuro di quanto tu sia diverso.

6

FileNotFoundException

Segnali che un tentativo di aprire il file indicato da un percorso specificato non è riuscita. Questa eccezione verrà generata dai costruttori FileInputStream, FileOutputStream e RandomAccessFile quando un file con il percorso specificato non esiste. Sarà anche generato da questi costruttori se il file esiste ma per qualche motivo è inaccessibile, ad esempio quando si tenta di aprire un file di sola lettura per la scrittura.

NoSuchFileException

Controllato eccezione generata quando si tenta di accedere a un file che non esiste.

La documentazione è auto-esplicativa.

+1

Lo ha reso preety chiaro. FileNotFound avrebbe dovuto essere FileNotAccesible o qualcosa del genere, sembra che Java cerchi di correggere questo in java 7, non può semplicemente rimuovere FileNotFound, potrebbe essere Java 9 che lo depreceranno. – Panther

+0

Sembra un javadoc perché FileNotFoundException non è aggiornato, poiché il costruttore di FileReader genera anche FileNotFoundException, mentre non è menzionato nel javadoc dell'eccezione. –

3

IMHO, c'è una sfumatura nella semantica di queste due eccezioni. NoSuchFileException viene generalmente utilizzato quando non ci sono file nella posizione prevista mentre FileNotFoundException viene utilizzato anche per questo caso, ma anche nel caso il file sia presente ma non è possibile accedervi. (Problema di autorizzazione, ecc ...)

Inoltre, si noti che NoSuchFileException è stato introdotto in Java 7, quindi per il vostro compito specifico, mi piacerebbe restare a FileNoteFoundException come è più generale e compatibile con Java 1.6

0

NoSuchFileException estende la nuova sottoclasse FileSystemExceptionFileSystemException mentre FileNotFoundException è una sottoclasse diretta di IOException. Come nuova classe genitore, FileSystemException dovrebbe essere il più completo possibile, quindi l'aggiunta di NoSuchFileException, nonostante l'aspetto della ridondanza. Le sottoclassi NotDirectoryException e AccessDeniedException spiegano bene la precedente funzionalità piuttosto che lasciare le diverse possibilità in un unico groviglio indistinguibile.

Problemi correlati