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)));