我创建了一个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){
}
}
答案 0 :(得分:1)
您已将readFile
标记为抛出IOException,因此无论您在何处使用该方法,都需要将其包装在try-catch
块中。
根据您当前的代码,我建议删除该方法的throws
部分,因为无论如何您都要抓住它。我建议你做的是删除方法中的try-catch
并将其留给来电者。我推荐这个,因为它使得捕获错误变得更简单,而不是返回的数组是空的。
答案 1 :(得分:0)
您已在 Util 类中添加了try catch块,因此无需抛出IOException。从Util类中的 readFile 方法中删除throws子句。
答案 2 :(得分:0)
readFile()声明IOException。这意味着在调用它的任何地方,还必须声明IOException或捕获它。在这种情况下,readFile()不需要声明IOException,因为它在方法中被捕获。
但是,更大的问题是您在类初始化中调用面向IO的方法。这使得很难明智地处理实际的例外情况。至少,如果发生异常,readFile()应返回null或空数组。
简而言之,不要在readFile()上声明IOException。