簡體   English   中英

未報告的IOException錯誤,但具有“引發異常”,並且Try and Catch在方法內

[英]Unreported IOException error, but has “throws Exception” and Try and Catch is within method

我創建了一個Util類,該類返回一個基於文件的數組。 當我嘗試在Statistics類中實例化此數組對象時,出現此錯誤:

錯誤:未報告的異常IOException; 必須被抓住或宣布被拋出

我同時拋出IOException和嘗試捕獲。 通過將try和catch放在action方法內部解決了類似的堆棧溢出問題,但是我的似乎已經擁有了。 任何幫助將非常感激。

UTIL:

import java.io.*;
import java.util.*;
import java.lang.*;
public class Util {
   public static Student[] readFile(String fileName) throws IOException  {
         Student studentArray[]=new Student[15];
         try{
            FileReader file = new FileReader("studentData.txt");
            BufferedReader buff = new BufferedReader(file);
            String line;
            line = buff.readLine();
            int index=0;
            while(line != null){
               System.out.println(line);
               if(index>14){
                  break;
               }
               line = buff.readLine();
               String[] result = line.split("\\s");
               int sid = Integer.parseInt(result[0]);
               int scores[] = new int[5];
               for(int x=1;x<result.length;x++){
                  scores[x-1] = Integer.parseInt(result[x]);
               }
               Student myCSC20Student = new Student(sid, scores);
               studentArray[index++] = myCSC20Student;
            }
         }
         catch (IOException e){
            System.out.println("Error: " + e.toString());
         } 
         return studentArray;  
      }    
   }

統計:

import java.io.*;
import java.util.*;
public class Statistics {
   final int LABS = 5;
   public int[] lowscores = new int[LABS];
   private int[] highscores = new int[LABS];
   private float[] avgscores = new float[LABS];
   public static void main(String args[]) {
   Student[] studArr = Util.readFile("studentData.txt") ;
   System.out.println(studArr[1]);
   }
   void calculateLow(Student[] a){

   }
   void calculateHigh(Student[] a){

   }
   void calculateAvg(Student[] a){

   }
}

您已將readFile標記為readFile IOException,因此,在使用該方法的任何地方,都需要將其包裝在try-catch塊中。

對於您當前的代碼,我建議刪除該方法的throws部分,因為無論如何您都在捕獲它。 我建議您做的是刪除方法中的try-catch ,然后將其留給調用方。 我推薦這樣做是因為與返回的數組為空相比,它更容易捕獲錯誤。

您已經在Util類中添加了try catch塊,因此無需拋出IOException。 從Util類的readFile方法中刪除throws子句。

readFile()聲明IOException。 這意味着在調用它的任何地方,也必須聲明IOException或捕獲它。 在這種情況下,readFile()不需要聲明IOException,因為它被捕獲在方法中。

但是,更大的問題是您正在類初始化中調用面向IO的方法。 這使得很難理智地處理實際的異常。 至少,如果發生異常,您的readFile()應該返回null或空數組。

簡而言之,不要在readFile()上聲明IOException。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM