FileNotFoundException i Java

1. Introduksjon

I denne artikkelen skal vi snakke om et veldig vanlig unntak i Java - FileNotFoundException.

Vi vil dekke tilfellene når det kan oppstå, mulige måter å behandle det på og noen eksempler.

2. Når kastes unntaket?

Som angitt på Java's API-dokumentasjon, kan dette unntaket kastes når:

  • En fil med det angitte banenavnet gjørikke eksistere
  • En fil med det angitte banenavnet gjør eksistere mener utilgjengelig av en eller annen grunn (forespurt om skriving for en skrivebeskyttet fil, eller tillatelser tillater ikke tilgang til filen)

3. Hvordan håndtere det?

Først av alt, med tanke på at det strekker seg java.io.IO Unntak som strekker seg java.lang. unntak, må du håndtere det med en prøvefangst blokker som med alle andre kontrollerte Exception.

Så hva du skal gjøre (forretnings / logikk relatert) inne i prøvefangst blokk avhenger faktisk av hva du trenger å gjøre.

Du må kanskje:

  • Øk et forretningsspesifikt unntak: dette kan være en feil med stoppkjøring, men du vil la avgjørelsen ligge i de øvre lagene i applikasjonen (ikke glem å ta med det originale unntaket)
  • Varsle en bruker med dialog eller feilmelding: dette er ikke en stoppkjøringsfeil, så bare varsling er nok
  • Opprette en fil: lese en valgfri konfigurasjonsfil, ikke finne den og opprette en ny med standardverdier
  • Opprett en fil i en annen bane: du må skrive noe, og hvis den første banen ikke er tilgjengelig, prøver du med en feilsikker
  • Bare logg en feil: denne feilen skal ikke stoppe utførelsen, men du logger den for fremtidig analyse

4. Eksempler

Nå ser vi noen eksempler, som alle vil være basert på følgende testklasse:

public class FileNotFoundExceptionTest {private static final Logger LOG = Logger.getLogger (FileNotFoundExceptionTest.class); private String fileName = Double.toString (Math.random ()); beskyttet tomrom readFailingFile () kaster IOException {BufferedReader rd = ny BufferedReader (ny FileReader (ny fil (filnavn))); rd.readLine (); // ikke behov for å lukke filen} klasse BusinessException utvider RuntimeException {public BusinessException (strengstreng, FileNotFoundException ex) {super (streng, ex); }}}

4.1. Logging av unntaket

Hvis du kjører følgende kode, vil den "logge" feilen i konsollen:

@Test offentlig ugyldig logError () kaster IOException {prøv {readFailingFile (); } catch (FileNotFoundException ex) {LOG.error ("Valgfri fil" + filnavn + "ble ikke funnet.", ex); }}

4.2. Å heve et forretningsspesifikt unntak

Deretter et eksempel på å heve et forretningsspesifikt unntak slik at feilen kan håndteres i de øvre lagene:

@Test (forventet = BusinessException.class) public void raiseBusinessSpecificException () kaster IOException {try {readFailingFile (); } catch (FileNotFoundException ex) {throw new BusinessException ("BusinessException: nødvendig fil var ikke til stede.", ex); }}

4.3. Opprette en fil

Til slutt vil vi prøve å lage filen slik at den kan leses (kanskje for en tråd som kontinuerlig leser en fil), men igjen fanger unntaket og håndterer den mulige andre feilen:

@Test offentlig ugyldig createFile () kaster IOException {prøv {readFailingFile (); } fange (FileNotFoundException ex) {prøv {new File (fileName) .createNewFile (); readFailingFile (); } catch (IOException ioe) {throw new RuntimeException ("BusinessException: selv oppretting er ikke mulig.", ioe); }}}

5. Konklusjon

I denne raske oppskriften har vi sett når en FileNotFoundException kan forekomme og flere alternativer for å håndtere det.

Som alltid er de fulle eksemplene over på Github.


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