我收到了一个未报告的异常;必须在下面的fill方法中被捕获或声明为抛出错误。从我读过的类似文章中,我假设错误是由read方法引发Exception引发的,但我无法修复。
public void read(int fileName) throws Exception { FileInputStream in = null; try { Scanner in = new Scanner("dataset.txt"); File inFile = new File(in.nextLine()); in = new FileInputStream(inFile); } catch ( Exception e) { System.out.println(e); } BufferedReader buf = new BufferedReader(new InputStreamReader(in) ); String input; input = buf.readLine(); fill(input,buf); }
填充定义为:
public void fill(String in,BufferedReader buf) { StringTokenizer token = new StringTokenizer(input); no = token.countTokens(); constraints = new Vector[noOfAttributes]; for (int i=0; i < no; i++) { c[i] = new Vector(); names = new String[noOfAttributes]; } for (int i=0; i < no; i++) { names[i] = token.nextToken(); } while((in = buf.readLine()) != null) //<----error given here { token = new StringTokenizer(input); Train example = new Train(no); } buffer.close(); }
您的fillDatacall buffer.readLine(),它被声明为throw IOException,但是您既没有捕获witin异常fillData,也没有声明它可能被抛出。
fillData
buffer.readLine()
IOException
最简单的解决方法是将的签名更改fillData为:
public void fillData(String input, BufferedReader buffer) throws IOException
我也强烈建议 不要 关闭中的读者fillData。通常,获取资源的相同代码应负责关闭资源。在这里,try-with- resources语句最合适,所以在read:
read
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(in))) { String input = buffer.readLine(); fillData(input,buffer); }
但是,即使这样也不是理想的-因为您早先打开了输入流。我 还 建议始终将编码传递给InputStreamReader构造函数,否则它将使用平台默认编码。在Java 7+中,您可以使用Files.newBufferedReader默认为UTF-8的版本。
InputStreamReader
Files.newBufferedReader
另外:
Exception
in
fileName
int
基本上, 所有 异常处理和资源管理都需要大量工作。