[进阶]Java:文件字节输出流、文件拷贝、资源释放

news2024/10/5 17:16:46

文件字节输出流(FileOutputStream)写数据出去的API

 流的关闭和刷新

代码演示如下:

​​​​​​​

public class OutputStreamDemo04 {
    public static void main(String[] args) throws Exception {
        //1.创建一个文件字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("/Users/birdbird/Documents/Java code/Java ProMax/file-io-app/src/out04.txt"); // 先清空之前的数据,写新的数据进去
        //OutputStream os = new FileOutputStream("/Users/birdbird/Documents/Java code/Java ProMax/file-io-app/src/out04.txt",true); // 追加数据管道
        //2.写数据出去
        //a.public void write(int a): 写一个字节出去
        os.write('a');
        os.write(98);
        os.write("\r\n".getBytes()); // 换行

        //b. public void write(byte[] buffer): 写一个字节数组出去
        byte[] buffer = {'a', 97, 98, 99};
        os.write(buffer);
        os.write("\r\n".getBytes()); // 换行

        byte[] buffer2 = "我是中国人".getBytes();
        os.write(buffer2);
        os.write("\r\n".getBytes()); // 换行

        //c. public void write(byte[] buffer , int pos , int len):写一个字节数组的一部分出去
        byte[] buffer3 = {'a', 97, 98, 99};
        os.write(buffer3, 0, 3);
        os.write("\r\n".getBytes()); // 换行

        // os.flush(); // 写数据必须,刷新数据 可以继续使用流
        os.close(); // 释放资源,包含了刷新的!关闭后流就不可以继续使用了
    }
}

 

代码演示如下:

public class CopyDemo05 {
    public static void main(String[] args) {
        try {
            //1.创建一个字节输入流管道与原视频接通
            InputStream is = new FileInputStream(""); //这里面要填东西,我没有填!
            //2.创建一个字节输出流管道与目标文件接通
            OutputStream os = new FileOutputStream(""); //这里也一样!
            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024];
            int len; // 记录每次读取的字节数
            while ((len = is.read(buffer)) != -1){
                os.write(buffer,0,len);
            }
            System.out.println("复制完成了!");

            //4.关闭流
            os.close();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 

 字节流适合做一切文件数据的拷贝吗?

  • 任何文件的底层都是字节,拷贝是一字不漏的转移字节,只要前后文件格式、编码一致没有任何问题。

try-catch-finally

  • finally:在异常处理时提供finally块来执行所有清除操作,比如说IO流中的释放资源
  • 特点:被finally控制的语句最终一定会执行,除非JVM退出
  • 异常处理标准格式:try....catch...finally

 

 代码演示如下:
 

public class TryCatchFinallyDemo1 {
    public static void main(String[] args) {
        InputStream is = null;
        OutputStream os = null;
        try {
            //1.创建一个字节输入流管道与原视频接通
            is = new FileInputStream(""); //这里面要填东西,我没有填!
            //2.创建一个字节输出流管道与目标文件接通
            os = new FileOutputStream(""); //这里也一样!
            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024];
            int len; // 记录每次读取的字节数
            while ((len = is.read(buffer)) != -1){
                os.write(buffer,0,len);
            }
            System.out.println("复制完成了!");

            System.out.println(10 / 0);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //无论代码是正常结束,还是出现异常都要最后执行这里
            System.out.println("====finally====");

            try{
                //4.关闭流
                if (os != null)os.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            try {
                if (is != null)is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

try-catch-recourse

代码演示:

public class TryCatchRecourseDemo1 {
    public static void main(String[] args) {
        try (
                //这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
                //1.创建一个字节输入流管道与原视频接通
                InputStream is = new FileInputStream(""); //这里面要填东西,我没有填!
                //2.创建一个字节输出流管道与目标文件接通
                OutputStream os = new FileOutputStream(""); //这里也一样!
        ) {
            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024];
            int len; // 记录每次读取的字节数
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            System.out.println("复制完成了!");

            System.out.println(10 / 0);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF开发txt阅读器14:通过C#代码设计UI布局

文章目录 需求分析C#代码UI设计 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录字体控件绑定💎前景/背景颜色书籍管理系统💎用树形图管理书籍语音播放💎播放进度显示💎快进快退&#x1f48…

ad18学习笔记六:ad18官方在线文档

这个挺有用,反正我是没找到离线的、完整的、详细的软件说明文档,只有去官网看在线的,有点卡,还是全英文的。 具体的位置直接进官网,比如这个: Board Region | Altium Designer 18.0 User Manual | Docume…

BOSHIDA AC DC电源模块在光纤通信设备的应用

BOSHIDA AC DC电源模块在光纤通信设备的应用 随着科技的不断发展,光纤通信技术逐渐成为人们日常生活和工作中广泛采用的一项技术。在光纤通信设/备中,稳定的电源模块是其正常运转的关键。AC DC电源模块在光纤通信设/备的应用也越来越广泛。 AC DC电源模…

清华青年AI自强作业hw3_1:用线性回归模型拟合MNIST手写数字分类

清华青年AI自强作业hw3_1:用线性回归模型拟合MNIST手写数字分类 实现过程思路分析逻辑回归二分类模型训练结果分析 相关链接 一起学AI系列博客:目录索引 hw3_1:用线性回归模型拟合MNIST手写数字分类 初步体验Tensorflow编程环境体会用回归模…

HDLBits自学笔记2:Verilog language.Vector

Vectors 建立一个电路,有一个3bit输入,输出这个向量,并将其分割为三个单独的1bit信号输出,电路图如下: module top_module ( input wire [2:0] vec,output wire [2:0] outv,output wire o2,output wire o1,output wir…

【30天熟悉Go语言】8 Go流程控制之循环结构for range、goto、break、continue

文章目录 一、前言二、for循环1、语法1)和Java的for循环一样2)和Java的while一样3)和Java的for(;;)一样 2、for语句执行过程 三、for range1、语法1)遍历key、value只遍历value 2)遍历key 四、关键字1、break1&#xf…

【Rust日报】2023-06-18 2023第三届中国Rust开发者大会圆满结束

2023第三届中国Rust开发者大会 发布 Mailtutan v0.3.0 - 用于测试和开发环境的 SMTP 服务器 变更日志: 添加数据修剪支持添加邮件目录存储向 API 添加删除消息添加 TLS 支持添加 SMTP 普通身份验证支持 github: https://github.com/mailtutan/mailtutan/ Kani 0.30.…

测试工程师个人简历模板

测试工程师个人简历模板篇1 姓 名: _x 性 别: 男 婚姻状况: 已婚 民 族: 汉族 户 籍: 湖南-岳阳 年 龄: 27 现所在地: 广东-深圳 身 高: 176cm 希望地区: 广东、 广…

Q-learning解决悬崖问题

Q-learning是一个经典的强化学习算法,是一种基于价值(Value-based)的算法,通过维护和更新一个价值表格(Q表格)进行学习和预测。 Q-learning是一种off-policy的策略,也就是说,它的行动策略和Q表格的更新策略是不一样的。 行动时&am…

vue2和vue3组件v-model区别

前言 单向数据流,父组件传给子组件的数据,子组件只能展示,不能修改,如果需要修改则需要emit事件让父组件修改 有些时候,一些组件并不是通过input来进行触发事件。也就是说value和input事件在大多数情况下能够适用&am…

ROS2性能分析

文章:Performance Analysis of ROS2 作者:Deepak Charan Logavaseekaran, Rakshith Macha Billava 编辑:点云PCL 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。未…

3-dubbo框架,应用程序,模块领域模型Model对象的初始化

在上一章中我们详细看了服务配置ServiceConfig类型的初始化,不过我们跳过了AbstractMethodConfig的构造器中创建模块模型对象的过程 那为什么会在Dubbo3的新版本中加入这个域模型呢,主要有如下原因 之前dubbo都是只有一个作用域的,通过静态类 属性共享 增加域模型是…

MacBook充电限制工具AlDente Pro

AlDente Pro是一款适用于Mac操作系统的小工具,可以帮助您限制电池充电量以延长电池寿命。通常情况下,电池在充满的状态下会继续接受电源充电,这可能会导致电池寿命缩短。使用AlDente Pro,您可以设置电池只充到特定的充电水平&…

使用omp并行技术实现快排加速

快排基本原理: 快速排序可以说是最为常见的排序算法,冒泡排序时间复杂度达到了O(N2),而桶排序容易造成浪费空间。快排(Quicksort)就成为了不错的选择。 1、原理:快排需要找一个数作…

【Nexus】上传jar至Nexus的两种方式

目录 一、前言二、pom文件添加推送代码配置1、配置pom.xml文件2、配置maven的settings.xml文件3、执行上传①、点击Maven-Lifecycle-deploy-Run Maven Build②、出现以下提示则上传成功③、这时,在Nexus的nexus-snapshot-hosted(快照类型的托管资源库&am…

【Python】函数进阶 ③ ( 函数作为参数传递 )

文章目录 一、函数参数传递类型二、代码示例 - 函数参数传递类型 一、函数参数传递类型 之前介绍的函数 , 都是 接收具体的 变量 或 字面量 数据 作为参数 , 如 : 数字 / 布尔值 / 字典 / 列表 / 元组 等 ; 函数 也可以作为参数 , 传入另一个函数中 ; 在 Python 中&#xff0…

主成分分析——SPSS实例分析

主成分分析是用原始变量的线性组合来表示主成分,且主成分彼此之间互不相关,且能反映出原始数据的绝大部分信息。 一般来说,当研究的问题涉及到多变量且变量之间存在很强的相关性时,我们可考虑使用主成分分析的方法来对数据进行简化…

智能的突破或许在智能之外

人工智能已经取得了不少令人瞩目的成果,但是仍然存在着许多问题和挑战,这些问题和挑战也许只能通过跨学科的合作和人类的智慧来解决,因此智能的突破在智能之外。在人工智能的决策过程中,往往会缺乏人类的道德判断和社会责任感&…

2018年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2018 年全国硕士研究生入学统一考试 管理类专业硕士学位联考 英语(二)试卷 考生须知 1.考生必须严格遵守各项考场规则。 2.答题前,考生将答题卡上的“姓名”、“考生编号”等信息填写清楚,并与准考证上的致…

【SpringCloud】Eureka 案例上手稍微带点原理

文章目录 1. 前置工作1.1 搭建 user-server1.1.1 pom1.1.2 po,mapper,controller1.1.3 yml1.1.4 启动类1.1.5 启动并访问 1.2 搭建 order-server1.2.1 pom1.2.2 po mapper controller1.2.3 yml1.2.4 启动类1.2.5 启动并访问 1.3 两个服务通信 2. Eureka2…