未处理的异常类型IOException

时间:2012-12-19 17:35:35

标签: java file-io io ioexception

  

可能重复:
  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(); //###
}

4 个答案:

答案 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无法真正确定: - )