Java——IO流(一)-(7/8):字节流-FileOutputStream、字节流完成文件拷贝

目录

文件字节输出流:写字节出去

构造器及常用方法

实例演示

案例:文件复制

过程分析

复制照片

复制文件


文件字节输出流:写字节出去

FileOutputStream(文件字节输出流)

  • 作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

构造器及常用方法

构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(File file, boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath, boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
public void write(int a)写一个字节出去
public void write{byte[] buffer)写一个字节数组出去
public void write(byte[] buffer ,int pos ,int len)写一个字节数组的一部分出去。
public void close()) throws IOException关闭流。

实例演示

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

public class FileOutputStreamTest1 {
    public static void main(String[] args) throws Exception {
        //1.创建一个字节输出流管道与目标文件接通
        //覆盖管道:覆盖之前的数据
//        OutputStream os = new FileOutputStream("HelloWorld\\src\\file.txt");

        //追加数据的管道
        OutputStream os = new FileOutputStream("HelloWorld\\src\\file.txt", true);

        //2.开始写字节数据出去
        os.write(97);   //97就是一个字节,代表a
        os.write('b');  //'b'一个字节
//        os.write('森');  //汉字为三个字节,默认只能泄出去一个字节

        byte[] bytes = "我爱你中国ABC".getBytes(StandardCharsets.UTF_8);
        os.write(bytes);

        os.write(bytes,0,15);

        //换行符
        os.write("\r\n".getBytes());    //多平台适用的换行符

        os.close();     //关闭流
    }
}

运行之后file文件的内容变为:

案例:文件复制

过程分析

例如现在我们要将D盘的文件复制一份到C盘中去。

要清楚通过文件字节输入输出流来实现的话,其中间层是内存;

  1. 首先创建字节输入流管道,让这条管道从D盘输入数据到内存中去,
  2. 字节输入流管道使用read方法,存入字节数组中;
  3. 然后创建字节输出流管道,从字节数组中输出到C盘;

重复进行,直到文件复制完毕。

复制照片

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class copyFile {
    public static void main(String[] args) throws Exception{
        //需求:复制照片
        //1.创建一个字节输入流管道与源文件接通
        InputStream is = new FileInputStream("C:\\Users\\Administrator\\Pictures\\flower.jpg");

        //2.创建一个字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.jpg");

        //3.创建一个字节数组,负责转移字节数据
        byte[] buffer = new byte[1024];     //1KB

        //4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少
        int len;    //记住每次读取了多少个字节
        while( (len = is.read(buffer)) != -1 ){
            os.write(buffer,0,len);
        }
        os.close();  //从内到外关闭流
        is.close();
        System.out.println("复制完成!");
    }
}

复制文件

也可以复制文本文件,即便中文编码被中间截断,也可以在后面的拷贝中接上,最终还是一个完整的文件。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class copyFile {
    public static void main(String[] args) throws Exception{
        //需求:复制文件
        //1.创建一个字节输入流管道与源文件接通
        InputStream is = new FileInputStream("HelloWorld\src\file.txt");

        //2.创建一个字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("HelloWorld\src\filecopy.txt");

        //3.创建一个字节数组,负责转移字节数据
        byte[] buffer = new byte[1024];     //1KB

        //4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少
        int len;    //记住每次读取了多少个字节
        while( (len = is.read(buffer)) != -1 ){
            os.write(buffer,0,len);
        }
        os.close();  //从内到外关闭流
        is.close();
        System.out.println("复制完成!");
    }
}

字节流非常适合做一切文件的复制操作

任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字节,只要复制后的文件格式一致就没问题!


END


学习自:黑马程序员——Java课程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何提高pcdn技术的传输效率?

提高PCDN技术的传输效率是一个复杂且多层面的任务,涉及多个关键策略和方法的结合。以下是一些具体的建议和措施,有助于提升PCDN技术的传输效率: 一.优化缓存策略: 精准定位热点内容,优先将这部分内容缓存…

《数字图像处理》实验报告四

一、实验任务与要求 对 Fig0403.tif 进行傅里叶变换并显示其频谱图像;fft2(x) 对 Fig0405.tif 图像进行填充和非填充的高斯滤波,并观察其不同;paddedsize,fft2(x,m,n) 由 sobel 空间滤波算子生成相应的频率…

小柴冲刺嵌入式系统设计师系列总目录

工作两年 逐渐意识到基础知识的重要性✌️ 意识到掌握了这个证书好像就已经掌握了80%工作中用到的知识了。剩下的就在工作的实战中学习 来和小柴一起冲刺软考吧!加油😜 【小柴冲刺软考中级嵌入式系统设计师系列】总目录 前言 专栏目标:冲刺…

最新国内首码对接app平台汇总,一手项目资源!

在当前激烈的移动应用市场竞争环境下,有效推广首次代码App项目变得至关重要。文章将探讨一些推广首次代码App项目的策略和适用的推广渠道,助于开发者获取更多流量和用户关注。 选择可靠的平台来进行推广。 在推广首码App项目之前,首先要考虑…

lmdeploy部署chatglm3模型并对话

lmdeploy部署chatglm3模型并对话 环境准备创建虚拟环境安装组件下载模型 chat启动模型并对话启动成api_server服务并对话启动成gradio服务 环境准备 使用30% A100 来运行chatglm3模型,采用lmdeploy来启动。 创建虚拟环境 # 创建虚拟环境 conda create -n langcha…

如何利用AI工具高效写作?

利用AI工具进行高效写作已经成为许多人的选择,因为它们能够帮助用户节省时间、提高效率,并在一定程度上保证写作质量。下面小编就和大家分享的一些具体的步骤和建议,帮助大家更好地利用AI工具进行写作。 1.选择合适的AI写作工具 根据自己的写…

以敏感数据保护为中心,建立健全高校数据安全治理体系

教育行业数据安全事件频发 2023年8月,南昌某高校3万余条师生个人信息数据在境外互联网上被公开售卖,该校受到责令改正、警告并处80万元人民币罚款的处罚,主要责任人被罚款5万元人民币。2023 年 7月,中国人民大学一名毕业生马某某…

BarTender版软件下载及安装教程

​根据行业数据显示强大的配套应用软件甚至能够管理系统安全性、网络打印功能、文档发布、打印作业记录等,为满足不同的需要和预算,BarTender 提供四个版本,每个都拥有卓越的功能和特性。根据软件大数据显示多国语言支持:轻松设计…

微信小程序-人脸核身解决方案

微信小程序-人脸核身解决方案 名词解释 由于不同公司对于 人脸识别的用词不一致,微信小程序背靠腾讯,因此以下的名词主要采集于腾讯云的解释 人脸识别: 主要关注人脸的检测、分析、比对等技术层面,侧重于识别个体身份的技术实现。…

【SSM】医疗健康平台-管理端-统计分析

知识目标 了解ECharts,能够说出ECharts的作用 掌握会员数量统计的实现,能够使用Echarts绘制会员数量统计图形报表 掌握套餐预约占比统计的实现,能够使用Echarts绘制套餐预约占比统计图形报表 掌握运营数据报表的实现 通过对数据进行统计…

Games101 透视投影矩阵推导

目录 齐次坐标 透视投影 透视投影的四棱锥体挤压为正交投影的长方体 变换规定 转换过程 观察1 观察2 关于任意一点挤压后向哪里移动的问题,简单推导了一下 齐次坐标 如下,(x, y, z, 1) 表示空间中的xyz点,让它每个分量乘以k&#…

使用Hugging Face获取BERT预训练模型

【图书推荐】《从零开始大模型开发与微调:基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 BERT是一个预训练模型,其基本架构和存档都有相应的服务公司提供下载服务,而Hugging Face是一家目前专门免费提…

如何应对UI测试自动化的不稳定循环!

以下为作者观点: 当我加入UI自动化团队时,我很高兴能为新功能的自动化测试用例开发做出贡献。然而,我很快意识到团队花费了大量时间来修复之前迭代中不稳定的测试。这种情况让我感到困惑,因为当自动化测试脚本已知不稳定时&#…

HRSC2016 :推动光学遥感图像细粒度船舶检测的创新引擎(目标检测)

亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 摘要&a…

LabVIEW在核磁共振实验室的应用

​核磁共振(NMR)实验室在进行复杂的核磁共振实验时,需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件,存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…

java设计模式(五)建造者模式(Builder Pattern)

1、模式介绍: 建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了创建细节。该模式将对象的构建过程和表示分离,使得相同的构建过程可以创建不同的表示。 2、应…

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告 哈喽小伙伴们好,我是Stark-C~ 对于入手PS5的游戏玩家来说,机器到手第一步,那就是订阅索尼PlayStation Plus会员,可以尽情的玩耍上百款游戏3A大作&#xf…

web刷题记录

[HDCTF 2023]SearchMaster 打开环境,首先的提示信息就是告诉我们,可以用post传参的方式来传入参数data 首先考虑的还是rce,但是这里发现,不管输入那种命令,它都会直接显示在中间的那一小行里面,而实际的命令…

L59---101.对称二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 (1)根节点为空: 如果根节点为空,树是对称的。 (2)递归检查: isMirror 方法递归检查两个子树是否是镜像对称的。 (3)辅助函数 isMirror: 1)如果两个节点都为空,它们是镜像对称的…

Java中特殊文件和日志技术

特殊文件和日志技术 特殊文件:Properties属性文件 特点: 特点一:都是键值对 特点二:键不能重复 特点三:文件后缀一般是Properties 作用: …