【Java】IO流 - 字节流

news2024/11/22 15:41:37

在这里插入图片描述

文章目录

  • FileInputStream 介绍
  • FileOutputStream介绍
  • 文件输入输出综合使用【拷贝】

在这里插入图片描述

FileInputStream 介绍

在这里插入图片描述
在这里插入图片描述

  • 创建一个txt文件,写入 HelloWorld 并用Java读取:
@Test
public void readFile01(){
    //提前创建一个文件hello.txt并编辑一个HelloWorld
    String filePath = "d:\\hello.txt";
    int readData = 0;
    FileInputStream fileInputStream = null;//定义在外面,扩大作用域
    try {  //创建FileInputStream对象,用于读取文件
        fileInputStream = new FileInputStream(filePath);
        //从该输入流读取一个字节的数据,如果没有输入可用,此方法则阻止
        //如果返回-1,表示读取完毕
        while((readData = fileInputStream.read()) != -1){
            System.out.print((char)readData);//把数字转为字符
        }
    } catch (IOException e) {
    }finally{
        //关闭文件流,释放资源
        try {
            fileInputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

因为read()方法是一个字节一个字节读取,英文和数字占一个字节,而汉字占三个字节(UTF-8编码下),所以read方法读取汉字会出现乱码,要使用 read(byte[] b)参数方法来几个字节几个字节的读取:

使用重载方法:read(byte[] b) 几个几个字节读取:

@Test
public void readFile02(){
    //提前创建一个文件hello.txt并编辑一个HelloWorld你好
    String filePath = "d:\\hello.txt";
    byte[] buf = new byte[8];//一次读取8个字节
    FileInputStream fileInputStream = null;//定义在外面,扩大作用域
    try {
        //创建FileInputStream对象,用于读取文件
        fileInputStream = new FileInputStream(filePath);
        //从该输入流读取最多b.length字节的数据到字节数组。
        //如果返回-1,表示读取完毕
        //如果读取正常,返回实际读取的字节数(注意是实际)
        while((fileInputStream.read(buf)) != -1){
            System.out.print(new String(buf,0, buf.length));//把数字转为字符
        }
    } catch (IOException e) {
    }finally{
        //关闭文件流,释放资源
        try {
            fileInputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

FileOutputStream介绍

在这里插入图片描述
// new FileOutputStream(filePath)创建方式:写入内容会覆盖原来的内容
// new FileOutputStream(filePath,true)创建方式:写入内容是追加内容,不覆盖

在这里插入图片描述
在这里插入图片描述

/*
演示使用 FileOutputStream 将数据写入到文件中
如果文件存在,则创建该文件
 */
@Test
public void writeFile(){
    //创建FileOutputStream对象
    String filePath = "d:\\a.txt";
    FileOutputStream fileOutputStream = null;//扩大作用域
    try {
        //得到FileOutputSteam对象
        // new FileOutputStream(filePath)创建方式:写入内容会覆盖原来的内容
        // new FileOutputStream(filePath,true)创建方式:写入内容是追加内容,不覆盖
        fileOutputStream = new FileOutputStream(filePath);
        //写入一个字节
        fileOutputStream.write('a');
        //写入字符串
        String str = " Hello World ";
        //str.getBytes() 可以把 字符串->字节数组
        fileOutputStream.write(str.getBytes());
        /*
        write(byte[] b,int off,int len)
        将len字节从位于偏移量off的指定字节数组写入此文件输出流
         */
        fileOutputStream.write(str.getBytes(),0,str.length());
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

文件输入输出综合使用【拷贝】

在这里插入图片描述

读取一部分就输出一部分,边读边输出,这样可以避免文件过大读取太久
(使用循环解决,分段输入输出)

public static void main(String[] args) {
    //文件拷贝:将 d:\\蜘蛛侠.jpg 拷贝到 d:\\spiderman.jpg
    //1.创建文件的输入流,将文件读取到程序
    //2.创建文件的输出流,将读取到的文件数据,写入到指定的文件
    String srcFilePath = "d:\\蜘蛛侠.jpg";
    String desFilePath = "d:\\spiderman.jpg";
    FileInputStream fileInputStream = null;
    FileOutputStream fileOutputStream = null;
    try {
        fileInputStream = new FileInputStream(srcFilePath);
        fileOutputStream = new FileOutputStream(desFilePath);
        //定义一个字节数组,提高读取效果
        byte[] buf = new byte[1024];
        int readLen=0;
        while((readLen = fileInputStream.read(buf)) != -1){
            //读取到后,立马通过FileOutputStream写入文件(为了提高速度)
            //即边读边写
            fileOutputStream.write(buf,0,readLen);//一定要用这个方法
        }
        System.out.println("拷贝完成~");
    } catch (IOException e) {
        System.out.println(e);
    } finally {
        try {
            //关闭输入流和输出流,释放资源
            if(fileInputStream != null) {
                fileInputStream.close();
            }
            if(fileOutputStream != null) {
                fileOutputStream.close();
            }
        } catch (IOException x) {
            throw new RuntimeException(x);
        }
    }
}

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

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

相关文章

Nacos 注册中心的常用配置

1.服务端地址 spring.cloud.nacos.discovery.server-addr 无 Nacos Server 启动监听的 ip 地址和端口2.服务名 spring.cloud.nacos.discovery.s ervice ${spring.application.name} 给当前的服务命名3.服务分组spring.cloud.nacos.discovery.groupDEFAULT_GROUP 设置服务所处的…

机器视觉之ros人脸识别

系列文章目录 机器视觉之ros人脸识别 ros人脸识别系列文章目录一、WIN下的环境设置二、连接摄像头设备到虚拟机三、安装摄像头驱动设备3.1判断安装usb还是uvc驱动包3.2查看摄像头设备3.3测试网络摄像头3.4安装摄像头驱动包四、调用视觉功能包五、人脸识别的调用一、WIN下的环境…

封装系统之新手操作版

一、需要软件:Vmware16,win10正版系统,EasySysprep5,EasyU_v3.6.iso 下载地址:EasySysprep5:https://www.itsk.com/thread-425990-1-1.html EasyU_v3.6:https://www.itsk.com/thread-426856-1-1…

【计算机视觉】不来试试图片轮廓提取?

文章目录🚩 前言🍈 边缘提取原理卷积用特殊的卷积核进行轮廓提取🍏 开始轮廓提取代码🚩 前言 最近学到了深度学习的卷积操作,在卷积神经网络出现之前,就已经有使用卷积核 (也叫滤波器&#xff…

NLP模型(三)——FastText介绍

文章目录1. FastText 概述2. FastText 分类模型2.1 结构2.2 n-gram3. FastText 词嵌入模型1. FastText 概述 首先,我们得搞清楚,FastText 是什么?有的地方说是分类模型,有的地方又将其用于词向量,那么,Fas…

ppt复现CVPR顶会流程图

本次目标如下图,难点在于立方体和矩阵格网的绘制 文末附机器学习绘图模板~ 先来绘制立方体,插入——形状——立方体,调节成如下图,再点击水平翻转: 绘制矩形,多绘制几个组合成矩形格网,右键设置…

TFT-LCD屏幕读取Flash芯片图片资源并显示

TFT-LCD屏幕读取Flash芯片图片资源并显示 在前面用TFT-LCD显示图片的实验中,由于图片资源过大,240 * 320 的图片大小为150K,而STM32F103ZET6的内部Flash才512K,最多能放三张图片,所以这次将图片放到外部Flash中&#…

【Java八股文总结】之Redis数据库

文章目录Redis 数据库一、Redis基础1、Redis应用场景2、Redis数据类型3、Redis常用命令4、Redis为什么速度快?5、Redis和Memcached的区别和共同点6、Redis和MySQL的区别?二、高可用1、主从复制Q:主从复制主要的作用?2、Redis主从复制原理Red…

Cadence之Allegro:蛇形与差分等长

文章目录 一、三种等长方法二、直接等长法设置教程1、差分设置2、analysis设置三、pin-pair法设置教程一、三种等长方法 直接等长法 适用pin和pin之间没有容抗和阻抗的情况,即pin和pin之间只有一根线、没有电阻和电容的时候才可以使用这种方法。 pin-pair法 建立Sigxplorer模形…

基于stm32的光照强度检测智能窗帘系统

资料编号:098 下面是相关功能视频演示: 98-基于stm32的光照强度检测智能窗帘系统Proteus仿真(源码仿真全套资料)功能介绍: 检测当前的光照强度,LCD1602显示,并且可以自动打开关闭窗帘&#xf…

Tomcat AJP 文件包含漏洞(CVE-2020-1938)

目录 1.漏洞简介 2、AJP13 协议介绍 Tomcat 主要有两大功能: 3.Tomcat 远程文件包含漏洞分析 4.漏洞复现 5、漏洞分析 6.RCE 实现的原理 1.漏洞简介 2020 年 2 月 20 日,公开CNVD 的漏洞公…

【ACL 2022】用于多标签文本分类的对比学习增强最近邻机制

论文地址:https://aclanthology.org/2022.acl-short.75.pdf 1. 摘要 多标签文本分类(MLTC)是自然语言处理中的一项基本且具有挑战性的任务。以往的研究主要集中在学习文本表示和建模标签相关性上。然而,在预测特定文本的标签时&…

玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!

sql语句group by使用详解group by的基本语法基本语法什么是分组查询(一个字段)多个字段的分组查询1.两个字段的分组查询2.三个字段及N个字段进行分组查询having子句的使用基本语法having是干什么的演示分组查询select关键字后面列名书写的注意事项group by的基本语法 基本语法…

入门必写项目之图书管理系统(分析详解+完美运行+代码可拿)

文章目录一、需求分析二、思路分析三、包分类四、模块代码展示1.1书籍类(Book)实现1.2书架类(BookList类)实现2.1功能接口(IOperation)实现2.2增加图书(Addoperation)实现2.3删除图书…

家庭实验室系列文章-电脑如何配置网络唤醒 (WOL)?

前言 其实这个专题很久很久之前就想写了,但是一直因为各种原因拖着没动笔。 因为没有资格,也没有钱在一线城市买房 (😂😂😂); 但是在要结婚之前,婚房又是刚需。 我和太太最终一起在一线城市周边的某二线城…

Pyspark学习笔记小总

pyspark官方文档: https://spark.apache.org/docs/latest/api/python/index.html pyspark案例教程: https://sparkbyexamples.com/pyspark-tutorial/ 1. 写在前面 这篇文章记录下最近学习的有关Pyspark以及用spark sql去处理大规模数据的一些常用语法,之前总觉得p…

中小企业办公自动化系统设计与实现(SSH)

目 录 摘 要 I ABSTRACT II 目 录 IV 第1章 绪论 1 1.1 课题背景 1 1.1.1 办公自动化概述 1 1.1.2 中小企业办公模式的现状 2 1.2 研究意义 3 1.3 设计技术及开发环境 5 1.3.1 设计技术 5 1.3.2 开发环境 7 第2章 可行性分析 9 2.1 组织和管理可行性 9 2.2 经济可行性 9 2.3 技…

动态规划模板总结(1)

动态规划思想(1) 背包问题 ​ 分类: 01 背包问题 ​ 含义:每个物体最多选1次,在不超过总体积的情况下价值最大图解: f(i,j)表示的是集合的某种属性,是个值。 集合是所有选法 i 只从前i个中选 朴素实现 #include&…

ElasticSearch是什么?ElasticSearch在SpringBoot中怎么用?SpringBoot整合ElasticSearch

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4.3.4 ElasticSearch(ES) 3.4.3.4.1 介绍 是一个…

MySQL JDBC编程

✏️作者:银河罐头 📋系列专栏:MySQL 🌲“种一棵树最好的时间是十年前,其次是现在” 文章目录前置知识APIJDBC的使用安装数据库代码插入操作查找操作前置知识 API API(Application Program Interface)被定义为应用程…