FileNotFoundException Java-ban

1. Bemutatkozás

Ebben a cikkben egy nagyon gyakori kivételről fogunk beszélni a Java-ban - a FileNotFoundException.

Kitérünk azokra az esetekre, amikor ez bekövetkezhet, a kezelés lehetséges módjairól és néhány példáról.

2. Mikor dobják el a kivételt?

Amint azt a Java API dokumentációja jelzi, ez a kivétel akkor dobható fel, ha:

  • A megadott elérési utat tartalmazó fájl csinálnem létezik
  • A megadott elérési utat tartalmazó fájl csinál létezik deelérhetetlen valamilyen oknál fogva (írásvédett fájl írása kért, vagy az engedélyek nem teszik lehetővé a fájlhoz való hozzáférést)

3. Hogyan kell kezelni?

Először is, figyelembe véve, hogy kiterjed java.io.IOException hogy kiterjed java.lang.Kivétel, akkor foglalkoznia kell vele a próbáld elkapni blokkolja, mint bármely más bejelölt E eseténxception.

Ezután mit kell tennie (üzleti / logikai szempontból) a próbáld elkapni blokk valójában attól függ, hogy mit kell tennie.

Lehet, hogy:

  • Vegyen fel egy vállalkozásspecifikus kivételt: ez lehet a végrehajtás leállításának hibája, de a döntést az alkalmazás felső rétegeiben hagyja (ne felejtse el az eredeti kivételt beilleszteni)
  • Riasztás egy felhasználóval párbeszéd- vagy hibaüzenettel: ez nem a végrehajtás leállításának hibája, ezért elegendő csak az értesítés
  • Fájl létrehozása: egy opcionális konfigurációs fájl elolvasása, nem megtalálása és új alapértelmezett értékekkel történő létrehozása
  • Hozzon létre egy fájlt egy másik útvonalon: írnia kell valamit, és ha az első elérési út nem érhető el, akkor egy hibamentesvel próbálkozik
  • Csak regisztráljon egy hibát: ennek a hibának nem szabad megállítania a végrehajtást, de naplózza a későbbi elemzés céljából

4. Példák

Most látunk néhány példát, amelyek mindegyike a következő tesztosztályon alapul:

public class FileNotFoundExceptionTest {private static final Logger LOG = Logger.getLogger (FileNotFoundExceptionTest.class); privát karakterlánc fájlnév = Double.toString (Math.random ()); védett void readFailingFile () dobja az IOException-t {BufferedReader rd = new BufferedReader (új FileReader (új File (fájlNév))); rd.readLine (); // nem kell bezárni a fájlt} osztály BusinessException kiterjeszti a RuntimeException {public BusinessException (String string, FileNotFoundException ex) {super (string, ex); }}}

4.1. A kivétel naplózása

Ha a következő kódot futtatja, akkor „naplózza” a hibát a konzolon:

@Test public void logError () dobja az IOException-t {try {readFailingFile (); } catch (FileNotFoundException ex) {LOG.error ("Nem kötelező fájl" + fájlnév + "nem található.", ex); }}

4.2. Vállalkozás-specifikus kivétel felvetése

Ezután egy példa egy vállalkozásspecifikus kivétel felvetésére, hogy a hiba a felső rétegekben kezelhető legyen:

@Test (várható = BusinessException.class) public void raiseBusinessSpecificException () dobja az IOException-t {try {readFailingFile (); } catch (FileNotFoundException ex) {dobjon új BusinessException-t ("BusinessException: a szükséges fájl nem volt jelen.", ex); }}

4.3. Fájl létrehozása

Végül megpróbáljuk létrehozni a fájlt, hogy az olvasható legyen (esetleg egy olyan szál esetében, amely folyamatosan fájlt olvas), de ismét megfogjuk a kivételt és kezeljük a lehetséges második hibát:

@Test public void createFile () dobja az IOException-t {try {readFailingFile (); } catch (FileNotFoundException ex) {próbálkozzon {új fájllal (fájlnév) .createNewFile (); readFailingFile (); } catch (IOException ioe) {dobjon új RuntimeException-t ("BusinessException: még a létrehozás sem lehetséges.", ioe); }}}

5. Következtetés

Ebben a gyors írásban láttuk, amikor a FileNotFoundException előfordulhat, és számos lehetőség van a kezelésére.

Mint mindig, a teljes példáknak vége a Githubon.