java.io.FileNotFoundException en Java

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:

  1. Si el archivo dado no está disponible en la ubicación dada, se producirá este error.
  2. 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:

  1. 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.
  2. 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.
  3. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *