Perché sto ricevendo “deve essere catturato o dichiarato di essere gettato” sul mio programma?

Ho lavorato a questo programma per un bel po ‘e il mio cervello è fritto. Potrei usare l’aiuto di qualcuno che ci guarda.

Sto cercando di creare un programma che legge un file di testo riga per riga e ogni riga viene trasformata in un ArrayList modo da poter accedere a ciascun token. Che cosa sto facendo di sbagliato?

 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); } } 

Sto per colpire i miei occhi. Ho ricevuto tre errori:

 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) { ^ 

Che cosa sto facendo di sbagliato?

Quando lavori con I / O in Java, la maggior parte delle volte devi gestire IOException, che può verificarsi in qualsiasi momento durante la lettura / scrittura o addirittura la chiusura dello stream.

Devi mettere il tuo blocco sensibile in un blocco catch // try e gestire l’eccezione qui.

Per esempio:

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

risorse:

  • oracle.com – Lezione: Eccezioni

Java controlla le specifiche delle eccezioni al momento della compilazione. È necessario rilevare l’eccezione o dichiararla generata nella firma del metodo. Ecco come dichiareresti che potrebbe essere generata dal tuo metodo:

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

Cattura l’eccezione se il tuo metodo deve fare qualcosa in risposta. Dichiaralo come se il tuo interlocutore dovesse sapere del fallimento.

Questi non si escludono a vicenda. A volte è utile rilevare l’eccezione, fare qualcosa e ripetere l’eccezione o una nuova eccezione che avvolge l’originale (la “causa”).

RuntimeException e le sue sottoclassi non devono essere dichiarate.

Gli IDE validi creeranno per te il blocco catch o aggiungeranno l’eccezione alla dichiarazione del metodo.

Si noti che se si aggiungono le eccezioni alla dichiarazione del metodo come da soluzione di Colin, qualsiasi metodo che richiama il proprio metodo dovrà anche avere un blocco di cattura adatto o dichiarare l’eccezione nella dichiarazione del metodo.

Potresti piuttosto farlo

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

in generale non è una ctriggers idea catturare la class da qualche tempo e decidere la logica da prendere o fare un’istanza di se hai bisogno di un log molto specifico.

Ho avuto lo stesso problema. L’ho risolto aggiungendo la libreria di spring “org.springframework.core”