关闭文件读/写操作时的正确异常处理

时间:2015-08-17 11:10:47

标签: java exception-handling try-catch bufferedreader

我想要的是减少从方法中抛出的异常 正如你所看到的,我在外部catch块中有一个内部try catch,以避免抛出异常 这是正常的做法还是有更好(更优雅)的方式? 或者这种方法是完全错误的,我应该抛出异常?

public static String readText(String filename) {        
    String text = "";
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(filename));
        String line = null;
        while( (line = br.readLine()) != null ){
            text += line;
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if(br != null)
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    return text;
}

3 个答案:

答案 0 :(得分:2)

就我个人而言,Files.readAllLines();Files.lines();采用更现代的方式。

然后您需要处理的只是一个IOException,并且会自动为您清理资源。

答案 1 :(得分:2)

有几种方法可以让您更加简洁:

  1. 使用Java 7功能在一个catch中捕获多个异常:

    try {...} catch(FileNotFoundException | IOException e) {...} 
    
  2. 使用名为try-with-resources的Java 7功能,以便您可以省略finally:

    try (BufferedReader br =
        new BufferedReader(new FileReader(filename))) {
    }
    
  3. 关于抛出异常与否是设计选择:

    • 我想向上层发出错误信号吗?
    • 我可以在上一级处理错误吗?

答案 2 :(得分:1)

如果您使用的是Java 7或更高版本,则可以使用try with resource。

try (BufferedReader br =
               new BufferedReader(new FileReader(path))) {
    String line = null;
    while( (line = br.readLine()) != null ){
        text += line;
    }
}