Java 多方法中的IOException处理

Java 多方法中的IOException处理,java,try-catch,Java,Try Catch,考虑以下代码 public class foo { public static void main(String[] args) { MyClass mc = new MyClass(); mc.read(); } } 及 如您所见,write未放置在try..catch块中。我可以为此编写一个catch,但是MyClass有很多方法,而且verb.write被大量使用。我还可以编写public void read()throws IOException将异常抛出给调用

考虑以下代码

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

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


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

一种方法是在
BufferedWriter
周围创建自己的“安全”包装器(就此而言,任何类型的)并在那里处理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)));

OT:到底为什么你有一个名为read的方法,它实际上做了相反的事情:write??“重定向到构造函数”?什么意思?构造函数总是先执行,而写入的
read
方法执行得更晚。你怎么能想象你能将后来发生的事情“重定向”到以前发生的事情?时间旅行?请看更新后的帖子。
read()。那么,处理这个问题的好方法是什么?正如我所说,在多种方法中,我想使用
verb.write()
@mahmood,我看不出这个问题有什么意义。您希望重定向异常并在以后处理它,但不知道在主方法中处理什么。我理解错了什么?
private SafeWriter verb;
...
verb = new SafeWriter(new BufferedWriter(new FileWriter(vFile)));