关闭文件 read/write 操作的正确异常处理
Proper exception handling on closing file read/write operations
我想要的是减少方法抛出的异常。
如您所见,我在外部 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;
}
就我个人而言,我会选择更现代的方法 Files.readAllLines();
或 Files.lines();
。
然后您只需要处理一个 IOException,系统会自动为您清理资源。
如果您使用的是 Java 7 或更高版本,您可以尝试使用资源。
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
String line = null;
while( (line = br.readLine()) != null ){
text += line;
}
}
有几种方法可以使您想做的事情更简洁:
使用 Java 7 功能一次捕获多个异常:
try {...} catch(FileNotFoundException | IOException e) {...}
使用名为 try-with-resources 的 Java 7 功能,这样您就可以省略最后:
try (BufferedReader br =
new BufferedReader(new FileReader(filename))) {
}
关于是否抛出异常是一个设计选择:
- 是否要向上层报告错误?
- 我可以处理上层的错误吗?
我想要的是减少方法抛出的异常。
如您所见,我在外部 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;
}
就我个人而言,我会选择更现代的方法 Files.readAllLines();
或 Files.lines();
。
然后您只需要处理一个 IOException,系统会自动为您清理资源。
如果您使用的是 Java 7 或更高版本,您可以尝试使用资源。
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
String line = null;
while( (line = br.readLine()) != null ){
text += line;
}
}
有几种方法可以使您想做的事情更简洁:
使用 Java 7 功能一次捕获多个异常:
try {...} catch(FileNotFoundException | IOException e) {...}
使用名为 try-with-resources 的 Java 7 功能,这样您就可以省略最后:
try (BufferedReader br = new BufferedReader(new FileReader(filename))) { }
关于是否抛出异常是一个设计选择:
- 是否要向上层报告错误?
- 我可以处理上层的错误吗?