FileNotFoundException v Jave
1. Úvod
V tomto článku si povieme o veľmi bežnej výnimke v Jave - FileNotFoundException.
Rozoberieme prípady, kedy môže dôjsť, možné spôsoby liečby a niekoľko príkladov.
2. Kedy sa hodí výnimka?
Ako je uvedené v dokumentácii API Java, túto výnimku je možné vyvolať, keď:
- Súbor so zadaným názvom cesty robínie existujú
- Súbor so zadaným názvom cesty robí existujú aleje neprístupný z nejakého dôvodu (požadované zapísanie pre súbor iba na čítanie alebo povolenie neumožňuje prístup k súboru)
3. Ako to zvládnuť?
Najskôr so zreteľom na to, že sa rozširuje java.io.IOException ktorý sa rozširuje java.lang.Výnimka, budete sa s tým musieť vysporiadať s a Skús chytiť blokovať ako pri všetkých iných zaškrtnutých Exception.
Potom, čo robiť (súvisiace s obchodom / logikou) vo vnútri servera Skús chytiť blok v skutočnosti závisí od toho, čo musíte urobiť.
Možno budete musieť:
- Vytvorte výnimku špecifickú pre podnikanie: môže to byť chyba zastavenia vykonávania, ale rozhodnutie ponecháte v horných vrstvách aplikácie (nezabudnite zahrnúť pôvodnú výnimku)
- Upozorniť používateľa pomocou dialógového okna alebo chybovej správy: nejde o chybu zastavenia vykonania, takže stačí iba upozornenie
- Vytvorte súbor: prečítajte si voliteľný konfiguračný súbor, nenájdite ho a vytvorte nový s predvolenými hodnotami
- Vytvorte súbor na inej ceste: musíte niečo napísať, a ak prvá cesta nie je k dispozícii, skúste to s cestou bezpečnou proti zlyhaniu
- Stačí prihlásiť chybu: táto chyba by nemala zastaviť vykonávanie, ale prihlásite ju pre budúcu analýzu
4. Príklady
Teraz uvidíme niekoľko príkladov, ktoré budú založené na nasledujúcej testovacej triede:
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 (); // nie je potrebné zatvárať súbor} trieda BusinessException rozširuje RuntimeException {public BusinessException (reťazec reťazca, FileNotFoundException ex) {super (string, ex); }}}
4.1. Prihlásenie výnimky
Ak spustíte nasledujúci kód, chyba v konzole sa „prihlási“:
@ Test public void logError () vyvolá IOException {try {readFailingFile (); } catch (FileNotFoundException ex) {LOG.error ("Nepovinný súbor" + názov súboru + "nebol nájdený.", ex); }}
4.2. Vytvorenie špecifickej obchodnej výnimky
Ďalej príklad zvýšenia výnimky špecifickej pre podnikanie, aby bolo možné chybu spracovať v horných vrstvách:
@ Test (očakávaná = BusinessException.class) public void raiseBusinessSpecificException () vyvolá IOException {try {readFailingFile (); } catch (FileNotFoundException ex) {throw new BusinessException ("BusinessException: necessary file was not present.", ex); }}
4.3. Vytvorenie súboru
Nakoniec sa pokúsime vytvoriť súbor, aby ho bolo možné prečítať (možno pre vlákno, ktoré nepretržite číta súbor), ale opäť chytíme výnimku a zaobchádzame s možnou druhou chybou:
@ Test public void createFile () vyvolá 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. Záver
V tomto rýchlom zápise sme videli, kedy a FileNotFoundException môže dôjsť a niekoľko možností, ako to zvládnuť.
Ako vždy, celé príklady skončili na Githube.