zoukankan      html  css  js  c++  java
  • 优雅地关闭文件流(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 对象不需要关闭
  • 相关阅读:
    Bootstrap组件福利篇 网址
    <a>标签中的href="javascript:;"
    HTTP请求上下文之终结:HttpContext类
    数据库分离 附加 sqlserver
    C#中三层架构UI、BLL、DAL、Model实际操作(转)
    比较好的网上的sqlserver读书笔记
    ORACLE重建索引详解
    SQL Server遍历表的几种方法(转)
    提高数据库操作的效率(转)
    哈希表Hashtable与字典表Dictionary<K,V>的比较。
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/14709392.html
Copyright © 2011-2022 走看看