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.


$config[zx-auto] not found$config[zx-overlay] not found