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.