java.io.FileNotFoundException , que es una excepción común que ocurre cuando intentamos acceder a un archivo. FileNotFoundExcetion es lanzado por los constructores RandomAccessFile , FileInputStream y FileOutputStream . FileNotFoundException ocurre en tiempo de ejecución, por lo que es una excepción verificada, podemos manejar esta excepción mediante código Java y debemos cuidar el código para que esta excepción no ocurra.
Declaración :
public class FileNotFoundException extends IOException implements ObjectInput, ObjectStreamConstants
Constructores :
- FileNotFoundException() : Da FileNotFoundException con mensaje nulo.
- FileNotFoundException(String s): Da FileNotFoundException con un mensaje detallado.
No tiene ningún método. Ahora comprendamos la jerarquía de esta clase, es decir, FileNotFoundException amplía IOException, que amplía aún más la clase Exception, que amplía la clase Throwable y amplía la clase Object.
Diagrama de jerarquía:
¿Por qué ocurre esta Excepción?
Hay principalmente 2 escenarios en los que se produce la excepción FileNotFoundException. Ahora vamos a verlos con ejemplos proporcionados:
- Si el archivo dado no está disponible en la ubicación dada, se producirá este error.
- Si el archivo dado es inaccesible , por ejemplo, si es de solo lectura, puede leer el archivo pero no modificarlo, si tratamos de modificarlo, se producirá un error o si el archivo al que intenta acceder la operación de lectura/escritura es abierta por otro programa, entonces ocurrirá este error.
Escenario 1:
Si el archivo dado no está disponible en la ubicación dada, se producirá este error.
Ejemplo:
Java
// Java program to illustrate // FileNotFoundException // All output and input streams // are available in java.io package import java.io.*; public class Example1 { public static void main(String[] args) { // creating object of FileReader FileReader reader = new FileReader("file.txt"); // passing FileReader to // buffered reader BufferedReader br = new BufferedReader(reader); // declaring empty string String data =null; // while loop to read data // and printing them while ((data = br.readLine()) != null) { System.out.println(data); } // closing the object br.close(); } }
Producción
prog.java:14: error: unreported exception FileNotFoundException; must be caught or declared to be thrown FileReader reader = new FileReader("file.txt"); ^ prog.java:25: error: unreported exception IOException; must be caught or declared to be thrown while ((data = br.readLine()) != null) ^ prog.java:31: error: unreported exception IOException; must be caught or declared to be thrown br.close(); ^ 3 errors
Escenario 2:
Si el archivo dado es inaccesible, por ejemplo, si es de solo lectura, entonces puede leer el archivo pero no modificar el archivo si tratamos de modificarlo, se producirá un error o si el archivo al que está tratando de acceder para el la operación de lectura/escritura es abierta por otro programa, entonces ocurrirá este error.
Ejemplo:
Java
// Java program to illustrate // FileNotFoundException // All output and input streams // are available in java.io package import java.io.*; import java.util.*; class Example2 { public static void main(String[] args) { // starting try block try { // Opening the file File f=new File("file.txt"); // creating printWriter object // by initiating fileWriter PrintWriter p1=new PrintWriter(new FileWriter(f), true); // printing sample text p1.println("Hello world"); p1.close(); // changing the file operation // to read-only f.setReadOnly(); // trying to write to new file PrintWriter p2=new PrintWriter(new FileWriter("file.txt"), true); p2.println("Hello World"); } // catching exception thrown // by try block catch(Exception ex) { ex.printStackTrace(); } } }
Producción
java.security.AccessControlException: access denied ("java.io.FilePermission" "file.txt" "write") at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.base/java.security.AccessController.checkPermission(AccessController.java:897) at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:322) at java.base/java.lang.SecurityManager.checkWrite(SecurityManager.java:752) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:225) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:187) at java.base/java.io.FileWriter.<init>(FileWriter.java:96) at Example2.main(File.java:19)
Excepción de manejo:
En primer lugar, tenemos que usar el bloque try-catch si sabemos si se producirá el error. Dentro del bloque de prueba, todas las líneas deberían estar allí si hay posibilidades de errores. Hay otros remedios para manejar la excepción:
- Si el mensaje de la excepción indica que no existe tal archivo o directorio, entonces vuelva a verificar si mencionó el nombre de archivo incorrecto en el programa o si el archivo existe en ese directorio o no.
- Si el mensaje de la excepción nos dice que el acceso está denegado, entonces debemos verificar los permisos del archivo (lectura, escritura, lectura y escritura) y también verificar si ese archivo está siendo utilizado por otro programa.
- Si el mensaje de la excepción nos dice que el archivo especificado es un directorio, debe eliminar el directorio existente (si el directorio no está en uso) o cambiar el nombre del archivo.
Publicación traducida automáticamente
Artículo escrito por dadimadhav y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA