多个方法中的IOException处理

时间:2017-08-01 14:25:39

标签: java try-catch

考虑以下代码

public class foo {
  public static void main(String[] args) {
    MyClass mc = new MyClass();
    mc.read();
  }
}

public class MyClass {
  private BufferedWriter verb;
  private String vFile;
  MyClass()
  {
    try {
      verb = new BufferedWriter(new FileWriter(vFile));
    } catch(IOException e) {
      System.out.println("Internal error1");
      System.out.println(e.getMessage());
    }
  }
  public void read()
  {
    // read a file and create an array
    verb.write("Array created");    // ERROR
  }
}

正如您所看到的,write未放置在try..catch块中。我可以为此写一个问题,但是MyClass有很多方法,verb.write被大量使用。我也可以编写public void read() throws IOException将异常抛给调用者main()。我仍然需要将mc.read()放在try..catch块中。由于MyClass有很多方法,所以我必须将它们全部放在main()的catch块中。

那么,有没有更好的方法来处理它?是否可以将与verb相关的所有异常重定向到定义了try..catch的构造函数MyClass()

1 个答案:

答案 0 :(得分:1)

一种方法是让自己的安全"围绕BufferedWriter包装(就此而言,任何类型的Writer)并在那里处理I / O错误:

class SafeWriter {
    private final Writer writer;
    public SafeWriter(Writer writer) {
        this.writer = writer;
    }
    public void write(int n) {
        try {
            writer.write(n);
        } catch (IOException e) {
            handleException(e);
        }
    }
    public void write(String s) {
        try {
            writer.write(s);
        } catch (IOException e) {
            handleException(e);
        }
    }
    ... // Provide wrappers for other methods here
    private void handleException(IOException e) {
        ...
    }
}

现在,您可以在新类上使用write方法在类中以统一的方式处理异常:

private SafeWriter verb;
...
verb = new SafeWriter(new BufferedWriter(new FileWriter(vFile)));