Resuelva la excepción no informada IOException debe ser capturada o declarada para ser lanzada en Java
-
Demostración de
IOException
no reportada -
Use
try-catch
para atraparIOException
no reportadas -
Use la palabra clave
throws
para erradicarIOException
Este tutorial muestra otra excepción de tiempo de compilación que dice excepción no reportada ioexception; debe ser cogida o declarada para ser arrojada
. También aprenderemos sobre sus posibles causas y soluciones a través de programas de muestra.
Demostración de IOException
no reportada
Código de ejemplo:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\inputFile.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
inputFile.close(); //<------This line causes this exception
}
if (outputFile != null) {
outputFile.close();
}
}
}
}
En el código anterior, leemos datos del archivo de entrada especificado; busca la letra x
. Tan pronto como se encuentra, reemplazamos la x
y el texto siguiente en la misma línea con la palabra Actualizado
entre comillas dobles (" "
).
Finalmente, cerramos ambos archivos (entrada y salida).
La línea inputFile.close();
que estamos señalando en el ejemplo de código anterior está causando una IOException
no reportada que debe ser capturada o lanzada. ¿Qué quiere decir esto?
Significa el inputFile.close();
está causando la IOException
de la que podemos deshacernos usando el bloque try-catch
(se llama capturar la excepción) o usando la palabra clave throws
(se llama excepción lanzada). ¿Cómo hacerlo?
Aprendamos con ejemplos de código a continuación.
Use try-catch
para atrapar IOException
no reportadas
Código de ejemplo:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\inputFile.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
try {
inputFile.close();
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
}
}
if (outputFile != null) {
outputFile.close();
}
}
}
}
El archivo de entrada tiene el siguiente contenido.
this is x one file
this is x two file
this is x three file
Después de ejecutar el programa, obtenemos un archivo de salida que contiene el contenido a continuación.
this is "Updated"
this is "Updated"
this is "Updated"
Aquí, eliminamos la IOException
utilizando el bloque try-catch
, donde la instrucción try
nos permite definir un bloque de código específico que debe examinarse en busca de errores durante el proceso de ejecución.
Si ocurre alguna excepción en cualquier declaración particular dentro del bloque try
, detendrá la ejecución y saltará al bloque catch
. Por lo tanto, se recomienda encarecidamente no mantener el código dentro del bloque intentar
que no arroja ninguna excepción.
Por otro lado, la declaración catch
permite definir un bloque de código que debe ejecutarse si hay algún error en el bloque try
. El capturar
se escribe justo después del bloque intentar
.
También podemos tener varios bloques de catch
según la cantidad de excepciones que podamos obtener en el bloque try
respectivo.
También podemos escribir un mensaje personalizado mientras manejamos la excepción. Ahora, la pregunta es cómo se manejan estas excepciones.
La máquina virtual de Java (JVM) verifica si se maneja una excepción o no. Si no es así, la JVM funciona con el controlador de excepciones predeterminado, que realiza algunas tareas que se enumeran a continuación:
- Imprime la descripción de una excepción en la consola de salida del programa.
- También imprime el stack trace en la consola de salida del programa. El seguimiento de la pila es la jerarquía de métodos donde ocurrió una excepción.
- Da lugar a la terminación del programa.
Por otro lado, el flujo normal de la aplicación se mantiene si un programador de aplicaciones ha manejado la excepción, lo que significa que se ejecuta el código restante.
Use la palabra clave throws
para erradicar IOException
Código de ejemplo:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) throws IOException {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\inputFile.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
inputFile.close();
}
if (outputFile != null) {
outputFile.close();
}
}
}
}
El contenido de un archivo de entrada es el siguiente.
this is x one file
this is x two file
this is x three file
El archivo de salida tiene el contenido actualizado como se indica a continuación.
this is "Updated"
this is "Updated"
this is "Updated"
Este código es el mismo que la sección anterior, donde solo usamos el bloque try-catch
para manejar la excepción. Aquí, estamos usando lanzamientos
para declarar una excepción; también podemos declarar múltiples excepciones separadas por una coma (,
).
La palabra clave throws
informa al programador de la aplicación que puede ocurrir una excepción en este método. Recuerde, la palabra clave throws
se escribe al definir la función (ver en el código de ejemplo dado).
Por lo tanto, es bueno y muy recomendable que el programador maneje esta excepción en el código para mantener el flujo de ejecución normal. De lo contrario, el programa terminará. Entendámoslo a través del código de ejemplo.
Copie el siguiente código y ejecútelo. Asegúrese de que tengamos una ruta incorrecta para el archivo de entrada.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) throws IOException {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\input.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
inputFile.close();
}
if (outputFile != null) {
outputFile.close();
}
}
System.out.println("Continue execution!");
}
}
Producción :
Caught IOException: C:\New folder\input.txt (The system cannot find the file specified)
Continue execution!
Veremos la salida como se indica arriba. El programa continúa con la ejecución del código porque hemos manejado la excepción.
Ahora, comente los bloques try
, catch
y finally
de la siguiente manera y vuelva a ejecutar el código. Asegúrese de que tengamos una ruta incorrecta para un archivo de entrada.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) throws IOException {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\input.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
// try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
//} catch (IOException ioe) {
// System.err.println("Caught IOException: " + ioe.getMessage());
//} finally {
if (inputFile != null) {
inputFile.close();
}
if (outputFile != null) {
outputFile.close();
}
//}
System.out.println("Continue execution!");
}
}
El programa terminará la ejecución tan pronto como encuentre la excepción y nunca llegue a la siguiente línea de código.
System.out.println("Continue execution!");
Esta es la razón por la que manejamos nuestras excepciones declaradas. Recuerde, solo podemos declarar las excepciones marcadas
porque el programador puede manejar las excepciones no marcadas dentro del código.
Artículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase