FileNotFoundException je další třída výjimky dostupná v java.io balík. Výjimka nastane, když se pokusíme získat přístup k souboru, který není v systému dostupný. Je to kontrolovaná výjimka, protože k ní dochází v době běhu, nikoli v době kompilace, a je vyvolána jedním z následujících konstruktorů:
FileNotFoundException Constructor
Třída FileNotFoundException má následující dva konstruktory:
1. FileNotFoundException()
Vytvoří výjimku FileNotFoundException a nastaví podrobnou zprávu o chybě na hodnotu null, protože jsme konstruktoru nepředali žádný parametr.
Syntax:
Syntaxe FileNotFoundException je následující:
public FileNotFoundException()
2. FileNotFoundException(String str)
Vytvoří výjimku FileNotFoundException a nastaví zprávu s podrobnostmi o chybě str, které předáme konstruktorovi.
Syntax:
Syntaxe FileNotFoundException je následující:
public FileNotFoundException(String str)
Metody výjimek FileNotFoundException
Poskytuje všechny metody, které poskytuje java.lang.Vhazovatelný a java.lang.Object třídy, protože je podtřídou obou těchto tříd.
Metody třídy java.lang.Throwable
addSuppressed (), fillInStackTrace (), getCause (), getLocalizedMessage (), getMessage (), getStackTrace (), getSuppressed (), initCause (), printStackTrace (), printStackTrace (), printStackTrace (), setStackTrace (), a toString ().
Metody třídy java.lang.Object
klon (), rovná se (), dokončit (), getClass (), hashCode (), oznámit (), notifyAll (), a Počkejte ().
Chcete-li se o těchto metodách dozvědět více, navštivte následující stránky:
https://www.javatpoint.com/object-class
https://www.javatpoint.com/post/java-throwable
Proč dochází k výjimce FileNotFoundException?
K této chybě dochází hlavně ze dvou důvodů. Důvody pro získání této výjimky jsou následující:
- Když se pokusíme získat přístup k tomuto souboru, není v systému dostupný.
- Když se pokusíme získat přístup k nepřístupnému souboru, například pokud je soubor dostupný pro operaci pouze pro čtení, a pokusíme se jej upravit, může dojít k chybě.
Vezměme si několik příkladů a pochopíme oba výše uvedené body jeden po druhém:
FileNotFoundExample1.java
// import required classes and packages package javaTpoint.MicrosoftJava; import java.io.*; // it contains all the input and the output streams // create FileNotFoundExceptionExample1 to undestand the first point. public class FileNotFoundExceptionExample1 { public static void main(String[] args) { // creating an instance of the FileReader class FileReader fileReader = new FileReader('Test.txt'); // create an instance of the BufferedReader and pass the FileReader instance to it. BufferedReader bufferReader = new BufferedReader(fileReader); // declaring an empty string by passing null value String fileData = null; // use while loop to read and print data from buffered reader while ((fileData = bufferReader.readLine()) != null) { System.out.println(fileData); } // closing the BufferedReader object try { bufferReader.close(); } catch (IOException e) { e.printStackTrace(); } } }
Výstup:
FileNotFoundExample2.java
// import required classes and packages package javaTpoint.MicrosoftJava; import java.io.*; // it contains all the input and the output streams // create FileNotFoundExceptionExample2 to understand the second point. public class FileNotFoundExceptionExample2 { // main() method start public static void main(String[] args) { try { // creating an instance of the File class to open file File fileObj = new File('Test.txt'); // creating an instance of the PrintWriter class by initiating FileWriter class instance PrintWriter printWriter1 = new PrintWriter(new FileWriter(fileObj), true); // print simple text hello world printWriter1.println('Hello world'); printWriter1.close(); // making Test file read only fileObj.setReadOnly(); // try to write data into Test.txt file PrintWriter printWriter2 = new PrintWriter(new FileWriter('Test.txt'), true); printWriter2.println('Hello World'); printWriter2.close(); } // catching exception thrown by the try block catch(Exception ex) { ex.printStackTrace(); } } }
Výstup:
Zpracování výjimky FileNotFoundException
Pro zpracování výjimky je nutné použít blok try-catch. Do bloku try vložíme řádek kódu, který může vyvolat výjimku. Kdykoli dojde k výjimce, blok catch ji zpracuje. Existuje několik dalších způsobů, kterými můžeme odstranit FileNotFountException a které jsou následující:
- Pokud najdeme chybovou zprávu žádný takový soubor nebo adresář neexistuje ; tuto výjimku můžeme odstranit opětovným ověřením kódu a kontrolou, zda je daný soubor dostupný v daném adresáři či nikoliv.
- Pokud najdeme chybovou zprávu přístup odepřen , musíme zkontrolovat, zda oprávnění souboru odpovídá našemu požadavku nebo ne. Pokud oprávnění neodpovídá našemu požadavku, musíme oprávnění souboru upravit.
- Pro přístup odepřen chybovou zprávu, musíme také zkontrolovat, zda tento soubor používá jiný program nebo ne.
- Pokud najdeme chybovou zprávu zadaný soubor je adresář , musíme jej smazat nebo změnit název souboru.
Ve třídě FileNotFoundExceptionExample1 tedy vložíme kód FileReader do bloku try-catch a zajistíme, že daný název souboru je v adresáři dostupný.
FileNotFoundExample1.java
// import required classes and packages package javaTpoint.MicrosoftJava; import java.io.*; // it contains all the input and the output streams // create FileNotFoundExceptionExample1 public class FileNotFoundExceptionExample1 { public static void main(String[] args) { // creating an instance of the FileReader class FileReader fileReader; try { fileReader = new FileReader('Test.txt'); // create instance of the BufferedReader and pass the FileReader instance to it. BufferedReader bufferReader = new BufferedReader(fileReader); // declaring an empty string by passing null value String fileData = null; // use while loop to read and print data from buffered reader try { while ((fileData = bufferReader.readLine()) != null) { System.out.println(fileData); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
Výstup: