可能重复:
Why do I get the “Unhandled exception type IOException”?
我正在尝试使用以下算法解决Euler#8。问题是,当我修改该行时,我有一个巨大的评论,错误Unhandled Exception Type IOException
出现在我用注释//###
标记的每一行上。
private static void euler8()
{
int c =0;
int b;
ArrayList<Integer> bar = new ArrayList<Integer>(0);
File infile = new File("euler8.txt");
BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream(infile), //###
Charset.forName("UTF-8")));
while((c = reader.read()) != -1) { //###
char character = (char) c;
b = (int)character;
bar.add(b); /*When I add this line*/
}
reader.close(); //###
}
答案 0 :(得分:6)
是的,IOException
是已检查的异常,这意味着您需要捕获它,或者声明您的方法也会抛出它。如果抛出异常,你想要会发生什么?
请注意,您通常应该关闭reader
块中的finally
,以便即使面对另一个例外它也会关闭。
有关已检查和未检查的例外的详细信息,请参阅Java Tutorial lesson on exceptions。
答案 1 :(得分:2)
一个解决方案:改为
private static void euler8() throws IOException {
但是调用方法必须捕获IOException。
或抓住例外:
private static void euler8()
{
int c =0;
int b;
ArrayList<Integer> bar = new ArrayList<Integer>(0);
BufferedReader reader;
try {
File inFile = new File("euler8.txt");
reader = new BufferedReader(
new InputStreamReader(
new FileInputStream(infile), //###
Charset.forName("UTF-8")));
while((c = reader.read()) != -1) { //###
char character = (char) c;
b = (int)character;
bar.add(b); /*When I add this line*/
}
} catch (IOException ex) {
// LOG or output exception
System.out.println(ex);
} finally {
try {
reader.close(); //###
} catch (IOException ignored) {}
}
}
答案 2 :(得分:0)
包装try / catch块以捕获异常。
如果你不这样做,它将无法处理。
答案 3 :(得分:0)
如果您无法阅读指定文件会怎样? FileInputStream
将抛出异常,Java要求您必须检查并处理它。
此类异常称为已检查异常。存在未经检查的异常,Java不要求您处理这些异常(主要是因为它们无法处理 - 例如OutOfMemoryException
)
请注意,您的处理可能包括捕获并忽略它。这不是一个好主意,但Java无法真正确定: - )