在JAVA 中我们会遇到各种流,每次写的时候我们需要在finally方法中关闭流,在关闭之前我们还要判断流是否为null,很麻烦!
原来的写法:(向TXT中写入内容)
public void testOne() {
File writeName = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件
FileWriter writer = null;
BufferedWriter out = null;
try {
writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
writer = new FileWriter(writeName);
out = new BufferedWriter(writer);
out.write("测试测试\r\n"); // \r\n即为换行
out.write("测试测试测试\r\n"); // \r\n即为换行
out.flush(); // 把缓存区内容压入文件
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我们发现在finally方法中我们不仅要判断,还要捕获异常,很繁琐,代码看起来也很臃肿,那么有没有一种优雅的写法呢?答案是肯定有的!
新的写法:
public void testOne(){
try {
File writeName = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件
writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
try (FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer)
) {
out.write("测试测试\r\n"); // \r\n即为换行
out.write("测试测试测试\r\n"); // \r\n即为换行
out.flush(); // 把缓存区内容压入文件
}
} catch (IOException e) {
e.printStackTrace();
}
}
是不是瞬间感觉代码少了很多,有人可能要问了,没有看见关闭流啊?,别急!try是可以自动关闭的!
try(FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer)) //可指定多个资源
{
//...
} catch (Exception e){
//...
}
try块退出时,会自动调用res.close()方法,关闭资源。
try自动关闭流的写法:
try(需要关闭的资源){ //可以多个,多个用“;”隔开
//...
}catch (Exception e) {
//...
}