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.