JAVA中如何优雅的关闭各种流

在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) {

	//...

}
发布了11 篇原创文章 · 获赞 29 · 访问量 6727

猜你喜欢

转载自blog.csdn.net/qq_22331931/article/details/95206791