java - 多种方法中的 IOException 处理

标签 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 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/

相关文章:

applescript - AppleScript:错误(尝试)行号

java - 如何 'wrap' 两个具有相同方法的类?

java - 处理中带有纹理的三角形

java - 为什么这个抛出异常的方法在调用时不必位于 try catch block 中?

java - Java中try catch中的圆括号/括号()是什么

java - 在这种情况下使用空的 catch block 是不好的做法吗?

Java Play 2 - 模板化

java - Eclipse scala.object 无法解析

java - 关闭钩子(Hook)的最佳位置

python - 有没有办法在不进行硬编码的情况下编写相同的 try- except 多行代码? Python