IO流-文件复制

IO流

  • 概述:IO流,输入输出流(Input Output)
  • 流:一种抽象的概念,对数据传输的总称。(数据在设备之间的传输称为流)
  • 常见的功能
    • 文件复制
    • 文件上传
    • 文件下载
  • 学习流,我们要搞懂流的方向,这个是很重要的一个事情
    • 输入-读数据 (从硬盘到程序)
    • 输出-写数据 (从程序到硬盘)
  • IO流分类
    • 按照数据流向
      • 输入流
      • 输出流
    • 按照数据类型
      • 字节流
      • 字符流
  • 如何判断使用哪种流?
    • 通过自带记事本打开,能读懂内容,用字符流
    • 一般使用字节流

字节流

字节输入流
InputStream
  • 概述:这个抽象类是字节输入流所有类的超类
FileInputStream
  • 概述:文件输入流,InputStream 的子类

  • 作用:将数据从硬盘读出展示到控制台上

  • 常用方法

    方法作用
    FileInputStream(String name)通过打开与实际文件的连接来创建一个 FileInputStream,该文件由文件系统中的路径名 name 命名
    int read()从该输入流读取一个字节数据,空值为(-1)
    int read(byte[] bys)从该输入流读取一个字节数组,空值为(-1)
  • 常用的两种读取格式

    // 一次读取一个字节数据
    int by;
    while((by = fis.read()) != -1){System.out.print((char)by);
    }
    
    // 一次读取一个字节数组
    byte[] bys = new byte[1024];
    int len;
    while((len = fis.read(bys)) != -1){System.out.print(new String(bytes, 0, len));
    }
    
  • 代码演示

    • 首先,在 D 盘创建 一个 a.txt 文件,内容 abc123

    注意:fis.read(bys) 一次最大读取 1024 个数据,放入 bys 数组中,返回 当前读取的字符长度

字节输出流
OutputStream
  • 概述:这个抽象类是表示字节输出流的所有类的超类
FileOutputStream
  • 概述:文件字节输出流

  • 作用:将数据写入到硬盘中

  • 常用方法

    方法作用
    FileOutputStream(String name)创建文件输出流以指定的名称写入文件
    void write(int b)将指定的字节写入此文件输出流(一次写一个字节数据)
    void write(byte[] b)将b.length字节从指定的字节数组写入此文件输出流(一次写一个字节数组数据)
    void write(byte[] b , int off , int len)将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流(一次写一个字节数组的部分数据)
  • 代码演示

    public class Test {public static void main(String[] args) throws IOException {// 创建文件字节输出流对象FileOutputStream fos = new FileOutputStream("D:\\b.txt");// 一次写一字节fos.write(65);// 一次写一字节数组byte[] bys = {97,98,99,100};fos.write(bys);// 从指定位置写fos.write(bys,1,2);// 创建文件字节输入流对象FileInputStream fis = new FileInputStream("D:\\b.txt");// 读数据byte[] b = new byte[1024];int len;while((len = fis.read(b)) != -1){System.out.println(new String(b,0,len));}}
    }
    

    注意:FileOutputStream 我们直接调用写方法的时候,并未创建文件 b.txt,但是它自己生成了,所以默认当无此文件时,先创建再写入!

字节缓冲流
BufferedOutputStream
  • 概述:字节缓冲输出流。该类实现缓冲输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用

  • 构造方法

    方法作用
    BufferedOutputStream(OutputStream os)根据字节输出流对象创建一个字节缓冲输出流对象
BufferedInputStream
  • 概述:字节缓冲输入流。创建BufferedInputStream将创建一个内部缓冲区数组,当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填入,一次很多字节

    方法作用
    BufferedInputStream(InputStream is)根据字节输入流对象创建一个字节缓冲输入流对象

注意:字节缓冲流仅仅提供缓冲区,而真正的读写数据还是依靠基本的字节流对象进行操作


字符流

  • 概述:字符流 = 字节流 + 编码表 ,不能直接写到文本中,需要刷新操作
字符输入流
Reader
  • 概述:字符输入流的抽象类
FileReader
  • 概述:用于读取字符文件的便捷类

    方法作用
    FileReader(String fileName)创建一个字符输入流对象
  • 常用方法:和字节流的一样,只不过字节变成了字符

字符输出流
Writer
  • 概述: 字符输出流的抽象类
FileWriter
  • 概述:用于写入字符文件的便捷类

    方法作用
    FileWriter(String fileName)创建一个字符输出流对象
    void flush()刷新资源
  • 常用方法:和字节流的一样,只不过字节变成了字符

  • 注意:这里写数据后,要调用 flush() 方法进行刷新才行,否则不会显示

字符缓冲流
BufferedReader
  • 概述:字符缓冲输入流(读数据)可以指定缓冲区大小,默认大小已经足够大多数用途

  • 常用方法和特有方法

    方法作用
    BufferedReader(Reader in)创建一个字符缓冲输入流对象
    String readLine()读一行文字,结果包含行的内容的字符串,不包括任何行终止字符,如果流的结尾已经到达,则为null
  • 代码格式

    String line;
    while((line = br.readLine()) != null){System.out.println(line);
    }
    
BufferedWriter
  • 概述:字符缓冲输出流(写数据)可以指定缓冲区大小,默认大小已经足够大多数用途

  • 常用方法和特有方法

    方法作用
    BufferedWriter(Writer out)创建一个字符缓冲输出流对象
    void newLine()写一行行分隔符,行分隔符字符串由系统属性定义
  • 写数据步骤

    bw.writer(line);                 // 写数据
    bw.newLine();                    // 换行
    bw.flush();                      // 刷新资源
    

IO流总结

  • 字节流可以复制任意文件数据,一般采用字节缓冲流一次读写一个字节数组的方式
  • 字符流只能复制文本数据,一般采用字符缓冲流的特有功能

案例

字节流文件复制

public class Test {public static void main(String[] args) throws IOException {// 创建 文件字节输入流和输出流对象FileInputStream fis = new FileInputStream("D:\\a.txt");FileOutputStream fos = new FileOutputStream("D:\\b.txt");// 定义字节数组,用来存储读取到的字节byte[] bys = new byte[1024];// 存储读取到的字节长度int len;while((len = fis.read(bys)) != -1){// 将读取到的数据,写入新文件中fos.write(bys,0,len);}// 释放流fis.close();fos.close();}
}

字节缓冲流文件复制

public class Test {public static void main(String[] args) throws IOException {// 创建字节缓冲输入流和输出流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\b.txt"));// 定义字节数组byte[] bys = new byte[1024];int len;while((len = bis.read(bys)) != -1){bos.write(bys,0,len);// 记得刷新,要不不显示bos.flush();}// 释放流bis.close();bos.close();}
}

字符流文件复制

public class Test5 {public static void main(String[] args) throws IOException {// 创建文件字符输入流和输出流对象FileReader fr = new FileReader("D:\\a.txt");FileWriter fw = new FileWriter("D:\\b.txt");// 定义字符数组char[] chs = new char[1024];int len;while((len = fr.read(chs)) != -1){fw.write(chs,0,len);// 记得刷新fw.flush();}// 释放流     fr.close();fw.close();}
}

字符缓冲流文件复制

public class Test6 {public static void main(String[] args) throws IOException {// 创建 字符缓冲输入流和输出流对象BufferedReader br = new BufferedReader(new FileReader("D:\\a.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\b.txt"));// 定义存储 数据的 字符串String s;while((s = br.readLine()) != null){bw.write(s);// 换行bw.newLine();// 刷新bw.flush();}// 释放流br.close();bw.close();}
}

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

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

相关文章

拓数派加入 OpenCloudOS 操作系统开源社区,作为成员单位参与社区共建

近日,拓数派签署 CLA(Contributor License Agreement 贡献者许可协议),正式加入 OpenCloudOS 操作系统开源社区。 拓数派(英文名称“OpenPie”)是国内基础数据计算领域的高科技创新企业。作为国内云上数据库和数据计算领域的引领者…

云渲染适合什么场景下使用?

云渲染作为影视动画主流的渲染方案,通常云渲染服务商拥有专属的渲染农场,通过渲染农场庞大的高新能数量机器,可协助你在短时间内完成渲染任务。 云渲染使用场景有哪些? 1、硬件限制: 如果你的个人或公司电脑硬件不足…

大模型第三节课程笔记

大模型开发范式 优点:具有强大语言理解,指令跟随,和语言生成的能力,具有强大的知识储备和一定的逻辑推理能力,进而能作为基座模型,支持多元应用。 不足:大模型的知识时效性受限,大模…

【系统高级-环境变量】path配置一整行,而不是列表

这是列表编辑方便。但是不知道为什么变成一行,非常的令人抓狂,经过研究发现,第一个环境变量必须为C:\Windows\system32 开头才可以 文章如下 修改环境变量中的一行变成列表形式_环境变量编辑不是列表-CSDN博客

DDIM学习笔记

写在前面: (1)建议看这篇论文之前,可先看我写的前一篇论文: DDPM推导笔记-大白话推导 主要学习和参考了以下文章: (1)一文带你看懂DDPM和DDIM (2)关于 DDIM …

音频文件元数据:批量修改技巧,视频剪辑高效修改元数据的方法

随着数字媒体技术的快速发展,音频文件已成为日常生活中的重要组成部分。无论是音乐、语音还是其他音频内容,元数据都是描述这些文件的重要信息。下面来看下云炫AI智剪如何批量修改音频文件元数据,在视频剪辑中高效修改元数据的方法。 下面来看…

Java常用类---包装类

包装类 包装类简介 Java语言是典型的面向对象编程语言,但是其中的8种基本数据类型并不支持面向对象编程,基本类型数据不具备"对象"的特性,即:没有携带属性以及没有方法可以调用。 为了解决上述问题,java为…

strtok函数的介绍

_str指被分解的字符串 delim指分隔符字符串 返回类型是指针 strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符…

【论文阅读笔记】Dichotomous Image Segmentation with Frequency Priors

1. 论文介绍 Dichotomous Image Segmentation with Frequency Priors 基于频率先验的二分图像分割 2023年发表在IJCAI Paper Code 2. 摘要 二分图像分割(DIS)具有广泛的实际应用,近年来得到了越来越多的研究关注。本文提出了解决DIS与信息…

vue项目 Network: unavailable的解决办法

vue项目npm run serve 后,只有localhost访问,network不能访。 看到网上说有三种情况: 多个网卡原因:打开网络共享中心,把多余的网络禁用掉,只留一个 在中配置host及public 系统环境变量问题…

Redis高并发高可用(主从复制、哨兵)

复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,哨兵和集群都是在复制的基础上实现高可用的。 默认…

实战:使用docker容器化服务与文件挂载-2

接着上文,演示Elasticsearch 和 Kibana 的安装,并讲解文件挂载 Elasticsearch of Docker (Kibana) 1、Elasticsearch 安装 ElasticSearch 使用 Docker 安装:https://www.yuque.com/zhangshuaiyin/guli-mall/dwrp5b 1.…

php实现支付宝商户转账

目录 一:背景介绍 一:准备工作 三:代码实现 一:背景介绍 最近工作中,要用到支付宝的商家转账功能,用php代码实现,网上找的内容,有些是老版本的实现,有些是调用sdk&am…

【经验分享】如何看论文的分区、SCI检索号、EI检索号等信息

0 前言 一般而言,被SCI检索的论文,都会同时被EI检索。我们以论文《Learning Disentangled Representation for Multimodal Cross-Domain Sentiment Analysis》为例,讲解一下如何查询论文的各项信息。 我们首先百度这个论文 可以看到它是发表…

Android性能优化系列——内存优化

内存,是Android应用的生命线,一旦在内存上出现问题,轻者内存泄漏造成App卡顿,重者直接crash,因此一个应用保持健壮,要做好内存的使用和优化。网上有很多讲JAVA内存虚拟机的好文章,我就不赘述了。…

SQL必知必会笔记(9~12章)

第九章 汇总数据 1、聚集函数用来进行记录数据的加工,然后再进行返回。 2、SQL的聚集函数: 函数 说明 AVG() 返回某列的平均值 COUNT() 返回某列的行数 MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某列值之和 3、AVG()函数 A…

想要成为机器学习领域的高手吗?这里有五本必读免费书,订阅周报发链接 (下)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Azure AI 内容安全Content Safety Studio实战

Azure AI Content Safety 检测应用程序和服务中用户生成和 AI 生成的有害内容。 Azure AI 内容安全包括文本和图像 API,可用于检测有害材料。 交互式 Content Safety Studio,可用于查看、浏览和试用用于检测不同形式的有害内容的示例代码。 关注TechLead…

项目框架构建之6:编写通用主机基础类

本文是“项目框架构建”系列之6,本文介绍如何编写通用主机基础类。 1.为了构建通用主机,我们先创建主机接口IAppHost接口 接口需要有配置项,我们定义为HostConfiguration,比如我们希望用户可以设定他的工作目录,就可…

深度学习|4.7 参数和超参数

4.7 参数和超参数 超参数是指需要用户提前设置好的参数,这些超参数最终会影响到参数的数值(相当于参数是动态调整得到的) 学习率的选取 最优学习率应该能使得代价函数趋于一个较低的常数。