2017-08-01 39 views
1

处理请看下面的代码IOException异常在多个方法

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

+2

OT:为什么地球上您已经阅读名为***的方法***,实际上则正好相反:*** ***写? ? –

+0

“重定向到构造函数”?你什么意思?构造函数总是首先执行,而您的'read'方法将在稍后执行。你怎么想像你可以将之后发生的事情“重定向”到之前发生的事情?时间旅行? –

+0

请参阅更新后的帖子。 'read()'读取输入文件,然后在详细文件中写入消息。 – mahmood

回答

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