考虑以下代码
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
block 中。我可以为此编写一个 catch,但是 MyClass
有很多方法,并且 verb.write
被大量使用。我还可以编写 public void read() throws IOException
将异常抛出给调用者 main()
。我仍然必须将 mc.read()
放在 try..catch
block 中。由于 MyClass 有很多方法,所以我必须将它们全部放在 main()
中的 catch block 中。
那么,有没有更好的方法来处理这个问题呢?是否可以将与 verb
相关的所有异常重定向到定义了 try..catch 的构造函数 MyClass()
?
最佳答案
一种方法是围绕 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)));
关于java - 多种方法中的 IOException 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440539/