¿Por qué estoy recibiendo “debe ser atrapado o declarado arrojado” en mi progtwig?

He estado trabajando en este progtwig durante bastante tiempo y mi cerebro está frito. Podría usar algo de ayuda de alguien que esté buscando.

Estoy tratando de hacer un progtwig que lea un archivo de texto línea por línea y cada línea se convierte en una ArrayList para que pueda acceder a cada token. ¿Qué estoy haciendo mal?

 import java.util.*; import java.util.ArrayList; import java.io.*; import java.rmi.server.UID; import java.util.concurrent.atomic.AtomicInteger; public class PCB { public void read (String [] args) { BufferedReader inputStream = null; try { inputStream = new BufferedReader(new FileReader("processes1.txt")); String l; while ((l = inputStream.readLine()) != null) { write(l); } } finally { if (inputStream != null) { inputStream.close(); } } } public void write(String table) { char status; String name; int priority; ArrayList tokens = new ArrayList(); Scanner tokenize = new Scanner(table); while (tokenize.hasNext()) { tokens.add(tokenize.next()); } status = 'n'; name = tokens.get(0); String priString = tokens.get(1); priority = Integer.parseInt(priString); AtomicInteger count = new AtomicInteger(0); count.incrementAndGet(); int pid = count.get(); System.out.println("PID: " + pid); } } 

Estoy a punto de sacar mis globos oculares. Tengo tres errores:

 U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:24: unreported exception java.io.IOException; must be caught or declared to be thrown inputStream.close();} ^ U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:15: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown inputStream = new BufferedReader(new FileReader("processes1.txt")); ^ U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:18: unreported exception java.io.IOException; must be caught or declared to be thrown while ((l = inputStream.readLine()) != null) { ^ 

¿Qué estoy haciendo mal?

Cuando trabaja con E / S en Java la mayor parte del tiempo, tiene que manejar IOException, que puede aparecer en cualquier momento cuando lee / escribe o incluso cierra la transmisión.

Tienes que poner tu bloque sensible en un // bloque catch try y manejar la excepción aquí.

Por ejemplo:

 try{ // All your I/O operations } catch(IOException ioe){ //Handle exception here, most of the time you will just log it. } 

Recursos:

  • oracle.com – Lección: Excepciones

Java comprueba las especificaciones de excepción en tiempo de comstackción. Debe capturar la excepción o declararla arrojada en la firma de su método. A continuación, le indicamos cómo declararía que puede arrojarse desde su método:

  public void read (String [] args) throws java.io.IOException { 

Captura la excepción si tu método necesita hacer algo en respuesta. Declare que fue lanzado si la persona que llama necesita saber sobre la falla.

Estos no son mutuamente exclusivos. A veces es útil detectar la excepción, hacer algo y volver a lanzar la excepción o una nueva excepción que envuelva el original (la “causa”).

RuntimeException y sus subclases no necesitan ser declaradas.

Los IDE buenos crearán el bloque catch para usted o agregarán la excepción a la statement del método.

Tenga en cuenta que si agrega las excepciones a la statement del método según la solución de Colin, cualquier método que invoca su método también tendrá que tener un bloque catch adecuado o declarar la excepción en la statement del método.

Podrías hacer

 try{ // All your I/O operations } catch(Exception e){ //Handle exception here, most of the time you will just log it. } 

en general, no es una mala idea atrapar la clase en sí un tiempo y decide que la lógica es capturar o hacer una instancia de si necesita un registro muy específico.

He tenido el mismo problema. Lo solucioné añadiendo la biblioteca de spring “org.springframework.core”