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

news2024/10/9 0:41:43

目录

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

构造器及常用方法

实例演示

案例:文件复制

过程分析

复制照片

复制文件


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

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课程

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

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

相关文章

1999年-2022年 商品零售价格指数、城市商品零售价格指数数据

商品零售价格指数(RPI)是一个关键的经济指标,用于衡量一段时间内商品零售价格的平均变动情况。以下是对商品零售价格指数的详细介绍: 数据简介 定义:商品零售价格指数反映的是与上一年度相比,零售价格的变…

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

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

【前端】Vue项目和微信小程序生成二维码和条形码

前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家分享Vue项目和微信小程序如何生成二维码和条形码,介绍了JsBarcode、wxbarcode等插件,并提供具体代码帮助大家深入理解,彻底掌握&#xff01…

图书馆借阅表

DDL 用户表 (Users) 图书表 (Books) 图书类别表 (BookCategories) 图书与类别关联表 (BookCategoryRelations) 借阅记录表 (BorrowRecords) 供应商表 (Suppliers) 采购记录表 (PurchaseRecords) CREATE TABLE Users (user_id INT PRIMARY KEY AUTO_INCREMENT,username …

解决宝塔linux面板 - 404 Not Found(Nginx)方法

宝塔Linux面板后台登录提示404 Not Found Nginx如何解决?码笔记:这是因为BT面板丢失了安全登录入口,如下图: 宝塔404 Not Found nginx 解决方法: 1、先SSH远程服务器 2、然后执行命令 bt 14 重新获取宝塔面板URL地址安…

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

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

cJSON源码解析之add_item_to_object函数

文章目录 前言add_item_to_object函数是干什么的add_item_to_object代码解析函数实现函数原理解析开头的代码constant_key参数的作用最后的if判断 add_item_to_array函数 总结 前言 在我们的日常编程中,JSON已经成为了一种非常常见的数据交换格式。在C语言中&#…

【Android】android studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感~ 点赞收藏关注 支持一下吧~ 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理:2.2 登录/注册模块2.3 功能界面初始化:2.4 图书管理模块2.5 图书租借服务2.6 读…

[物联网专题] - 螺钉式接线端子的选择和辨识

工业设备上大量使用各式各样的端子来连接外部设备和电缆电线,其中用得最多的就是标准的螺钉式端子,其外形如下: 标准端子一般是2位(2个接线端子),端子与端子之间可以级联,组成任意数量的位数。…

vue项目无后台版本打包上传到服务器

打包项目 也可以在文件目录下npm run build 生成dist文件夹 将dist文件夹里的所有文件拷贝到站点的根目录,这里使用宝塔面板进行操作 前提你得先创建站点,域名绑定等操作

项目菜单配置

stores/index.js import {createStore } from "vuex"; //计算高度 let height window.innerHeight;//计算分辨率 let width window.innerWidth;let activeIndex localStorage.getItem("activeIndex"); if (activeIndex null || activeIndex "&q…

制图工具(14)导出图层字段属性信息表

在制图工具(13)地理数据库初始化工具中我们提到,有一个参数为:“输入Excel表”,并要求表格中的图层字段属性项需要按工具的帮助文档中的示例进行组织… 如下图: 此外,总有那个一个特别的需求&am…

【单片机毕业设计选题24028】-基于STM32的大棚温湿度采集系统

系统功能: 系统分为手动和自动模式,上电默认为自动模式,自动模式下系统根据采集到的传感器值 自动控制,温度过低后自动开启加热,湿度过高后自动开启通风,光照过低后自动开启补 光,水位过低后自动开启水泵…

Android 界面库 (二) 之 Data binding 详细介绍

1. 简介 回顾我们在前面文章《Android 界面库 (一) 之 View binding 简单使用》中学习的 View Binding,它旨在简化 View 与代码之间的绑定过程。它会在编译时期为每个 XML 布局文件生成相应的绑定类(Binding class),该类里包含了布局文件每个有 ID 的 Vi…

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

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

php composer 报错

引用文章: Composer设置国内镜像_composer 国内源-CSDN博客 php composer.phar require --prefer-dist yiidoc/yii2-redactor "*" A connection timeout was encountered. If you intend to run Composer without connecting to the internet, run the …

day49---数据结构与算法(四)

三. 基础算法 3.1 查找概述 查找算法是一种在数据集中寻找特定数据项的方法。通常,数据集是在计算机程序中存储的,例如数组、链表或散列表。在编写程序时,查找算法是非常重要的,它有助于快速找到所需的数据。在本文中&#xff0…

Linux系统安装Lua语言及Lua外部库

安装Lua Lua语言是一种轻量级、高效且可扩展的脚本语言,具有简洁易学的语法和占用资源少的特点。它支持动态类型,提供了丰富的表达式和运算符,同时具备自动垃圾回收机制和跨平台性。Lua语言易于嵌入到其他应用程序中,并可与其他语…

高性能并行计算华为云实验五:PageRank算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建PageRank源码 3.2 makefile的创建和编译 3.3 主机配置文件建立与运行监测 四、实验结果与分析 4.1 采用默认的节点数量及迭代次数进行测试 4.2 分析并行化下节点数量与耗时的变化规律 4.3 分析迭代次数与耗时的变…

2024广东省职业技能大赛云计算赛项实战——集群部署GitLab Agent

集群部署GitLab Agent 前言 题目如下: 部署GitLab Agent 将Kubernetes集群添加到demo-2048项目中,并命名为kubernetes-agent,项目命名空间选择gitlab-ci。 说是部署GitLab Agent,但据我了解,Agent就是Runner,看题目…