FileNotFoundException u Javi
1. Uvod
U ovom ćemo članku govoriti o vrlo čestoj iznimci u Javi - FileNotFoundException.
Obuhvatit ćemo slučajeve kada se to može dogoditi, moguće načine liječenja i neke primjere.
2. Kada se baca izuzetak?
Kao što je naznačeno u Java-ovoj API dokumentaciji, ova se iznimka može pojaviti kada:
- Datoteka s navedenim imenom puta činine postoje
- Datoteka s navedenim imenom puta čini postoje alije nepristupačna iz nekog razloga (zatraženo pisanje za datoteku samo za čitanje ili dozvole ne dopuštaju pristup datoteci)
3. Kako to riješiti?
Prije svega, uzimajući u obzir da se proteže java.io.IOException to se proteže java.lang.Izuzetak, morat ćete se nositi s tim s a pokušaj uhvatiti blok kao i kod svih ostalih provjerenih Exception.
Zatim, što učiniti (povezano s poslovanjem / logikom) unutar pokušaj uhvatiti blok zapravo ovisi o tome što trebate učiniti.
Možda ćete trebati:
- Povećajte poslovnu iznimku: ovo može biti pogreška zaustavljanja, ali odluku ćete ostaviti u gornjim slojevima aplikacije (ne zaboravite uključiti izvornu iznimku)
- Upozorite korisnika dijalogom ili porukom o pogrešci: ovo nije pogreška zaustavljanja, pa je dovoljno samo obavještavanje
- Stvaranje datoteke: čitanje neobavezne konfiguracijske datoteke, ne pronalaženje i stvaranje nove sa zadanim vrijednostima
- Stvorite datoteku na drugom putu: trebate nešto napisati, a ako prvi put nije dostupan, pokušajte s sigurnim
- Samo prijavite pogrešku: ova pogreška ne bi trebala zaustaviti izvršenje, ali prijavit ćete je za buduću analizu
4. Primjeri
Sada ćemo vidjeti nekoliko primjera, koji će se svi temeljiti na sljedećoj testnoj klasi:
javna klasa FileNotFoundExceptionTest {privatni statički konačni zapisnik LOG = Logger.getLogger (FileNotFoundExceptionTest.class); private String fileName = Double.toString (Math.random ()); zaštićena praznina readFailingFile () baca IOException {BufferedReader rd = novi BufferedReader (novi FileReader (nova datoteka (fileName))); rd.readLine (); // nema potrebe za zatvaranjem datoteke} klasa BusinessException proširuje RuntimeException {public BusinessException (string string, FileNotFoundException ex) {super (string, ex); }}}
4.1. Zapisivanje iznimke
Ako pokrenete sljedeći kôd, on će "zapisati" pogrešku u konzoli:
@Test public void logError () baca IOException {try {readFailingFile (); } catch (FileNotFoundException ex) {LOG.error ("Izborna datoteka" + fileName + "nije pronađena.", ex); }}
4.2. Podizanje poslovne iznimke
Dalje, primjer podizanja poslovne iznimke kako bi se pogreška mogla riješiti u gornjim slojevima:
@Test (očekuje se = BusinessException.class) public void riseBusinessSpecificException () baca IOException {try {readFailingFile (); } catch (FileNotFoundException ex) {throw new BusinessException ("BusinessException: potrebna datoteka nije bila prisutna.", ex); }}
4.3. Stvaranje datoteke
Napokon, pokušat ćemo stvoriti datoteku kako bi se mogla čitati (možda za nit koja kontinuirano čita datoteku), ali opet uhvatiti iznimku i riješiti moguću drugu pogrešku:
@Test public void createFile () baca IOException {try {readFailingFile (); } catch (FileNotFoundException ex) {try {new File (fileName) .createNewFile (); readFailingFile (); } catch (IOException ioe) {throw new RuntimeException ("BusinessException: čak ni stvaranje nije moguće.", ioe); }}}
5. Zaključak
U ovom brzom zapisu vidjeli smo kada a FileNotFoundException može se pojaviti i nekoliko mogućnosti da se to riješi.
Kao i uvijek, cjeloviti primjeri su gotovi na Githubu.