• 优雅地关闭文件流(jdk1.7语法糖)


    传统的关闭流文件的方式

    在finally里面手动关闭流

     public void copyFile() {
            /**
             * 1. 创建输入/输出流
             * 2. 执行文件拷贝,读取文件内容,写入到另一个文件中
             * 3. **关闭文件流资源**
             */
    
            // 定义输入路径和输出路径
            String originalUrl = "lib/FileCopyTest.java";
            String targetUrl = "targetTest/target.txt";
    
            // 声明文件输入流,文件输出流
            FileInputStream originalFileInputStream = null;
            FileOutputStream targetFileOutputStream = null;
    
            try {
                // 实例化文件流对象
                originalFileInputStream =
                        new FileInputStream(originalUrl);
    
                targetFileOutputStream =
                        new FileOutputStream(targetUrl);
    
                // 读取的字节信息
                int content;
    
                // 迭代,读取/写入字节
                while ((content = originalFileInputStream.read()) != -1) {
                    targetFileOutputStream.write(content);
                }
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
    
                // 关闭流资源
                if (targetFileOutputStream != null) {
                    try {
                        targetFileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (originalFileInputStream != null) {
                    try {
                        originalFileInputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    
    

    jdk1.7以后的文件流关闭方式

    条件:

    1.对象的创建要放到小括号里面创建

    2.类有实现AutoCloseable 接口

    @Test
        public void copyFile() {
    
            // 先定义输入/输出路径
            String originalUrl = "lib/NewFileCopyTest.java";
            String targetUrl = "targetTest/new.txt";
    
            // 初始化输入/输出流对象
            try (
                    FileInputStream originalFileInputStream =
                            new FileInputStream(originalUrl);
    
                    FileOutputStream targetFileOutputStream =
                            new FileOutputStream(targetUrl);
            ) {
    
                int content;
    
                // 迭代,拷贝数据
                while ((content = originalFileInputStream.read()) != -1) {
                    targetFileOutputStream.write(content);
                }
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    

    资源关闭的特殊情况

    • 资源对象被return的情况下,由调用方关闭资源
    • ByteArrayInputStream等不需要检查关闭的资源对象
    • 使用Socket获取的InputStream和OutputStream 对象不需要关闭
  • 相关阅读:
    BETA 版冲刺前准备
    Alpha 事后诸葛亮(团队)
    Learn Docker(一)—软件安装与常规操作
    Alpha 答辩总结
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    团队作业-随堂小测(同学录)
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/14709392.html
Copyright © 2020-2023  润新知