Java文件读写数据流

这篇具有很好参考价值的文章主要介绍了Java文件读写数据流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.按照读写方式来分

以下这几个类都是抽象类.并且都有对于文件操作的具体实现类.File+类名就是具体的实现类

1.1.二进制方式读写

1.1.1.InputStream

以二进制方式读.有两个主要方法.

1.read();

该方法有三个版本

  1. 无参: read() 读取一个字节的数据,返回 -1 表示读取结束
  2. 一个参数: read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回值是实际读到的数量;返回 -1 表示读取结束.读取到的内容会存储在传入的数组参数中.
  3. 三个参数: read(byte[] b, int off, int len) 最多读取 (len-off)个字节的数据到 b 中,放在byte数组中,从 off 开始,返回实际读到的数量;返回 -1 表示读取结束.读取到的内容会存储在传入的数组参数中.
2.close();

关闭字节流.Java的数据流在使用结束时都需要手动关闭字节流.否则长时间未关闭会产生内存泄漏的危险.

1.1.2.OutputStream

以二进制方式写.有三个主要方法.默认此操作每次都会清空旧的内容.向内部写入新的内容.如果需要追加需要添加参数,

1.write();

该方法同样有三个版本

  1. 一个int型的参数: write(int b) 写入一个字节
  2. 一个字节数组的参数: write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
  3. 三个参数: write(byte[] b, int off, int len) 将 b 这个字符数组中从 off 开始写入 len 个长度的数据
2.close();

与InputStream流相同,使用结束需要关闭流.否则会产生危险.

3.flash();

清空缓存区.

因为I/O 的速度是很慢的,所以大多的 OutputStream 为了减少设备操作的次数,就先将I/O内容先写到一片内存中(缓冲区).等到缓冲区满了,或者达成一定条件时才真正将数据写入设备中.

这样的操作提升了一定的效率,但造成一个后果.就是我们写的数据,很可能会遗留一部分在缓冲区中.所以我们就需要这样一个操作.在合适的时候,让缓冲区中的内容全部写入设备(清空缓冲区).

1.2.字符方式读写

用法和以字节读写类似,不同的是操作对象: 一个操作字节,一个操作字符.

1.2.1.Reader

以字符方式读.与InputStream类似.有 read()和close() 方法.并且用法也类似.

1.read();

该方法有三个版本

  1. 无参: read()
  2. 一个参数: read(char[] b)
  3. 三个参数: read(char[] b, int off, int len)
2.close();

关闭字符流.

1.2.2.Writer

以字符方式写.与OutputStream类似.有 write(),close()和flash() 方法.并且用法也类似.

1.write();

该方法同样有三个版本

  1. 一个int型的参数: write(int b)
  2. 一个字符数组的参数: write(char[] b)
  3. 三个参数: write(char[] b, int off, int len)
2.close();

关闭字符流.

3.flash();

清空缓存区.

2.具体的实现类

  1. FileInputStream
  2. FileOutputStream
  3. FIleReader
  4. FileWriter

2.1构造方法

这几个实现类的构造方法类似.这里以FileInputStream为例.

  1. FileInputStream(File file) : 利用 File 构造文件输入流
  2. FileInputStream(String name) : 利用文件路径构造文件输入流

需要注意的是,这几个写入流都是清空原有文件数据,重新写入新的数据.如果想要追加数据的话.需要在构造方法参数后面添加true.

FileOutputStream(String name,boolean bo);这里的第二个参数为true时就是向文件中追加内容.文章来源地址https://www.toymoban.com/news/detail-600418.html

3.复制文件案例

import java.io.*;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要拷贝的源路径");
        String src = scanner.next();
        System.out.println("请输入要拷贝的目标路径");
        String dest = scanner.next();

        File srcFile = new File(src);
        if (!srcFile.isFile()) {
            System.out.println("输入源路径有误");
            return;
        }

        try (InputStream inputStream = new FileInputStream(src)) {
            try (OutputStream outputStream = new FileOutputStream(dest)) {
                byte[] buffer = new byte[1024];
                while (true) {
                    int len = inputStream.read(buffer);
                    if (len == -1) {
                        break;
                    }
                    outputStream.write(buffer, 0, len);
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

到了这里,关于Java文件读写数据流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode】剑指 Offer 41. 数据流中的中位数 p214 -- Java Version

    题目链接 :https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

    2023年04月08日
    浏览(56)
  • 深度解析Java JDK 1.8中Stream流的源码实现:带你探寻数据流的奥秘

    1.1 什么是Stream流,以及它的主要特点和优势 什么是Stream流 ? jdk1.8 中引入的Stream流是一种用 函数式编程方式 操作集合的新特性,提供了一种更简洁、高效的方式来处理集合数据,可以将集合操作转换为一系列的流水线操作,实现更加优雅和功能强大的数据处理。 主要特点

    2024年03月16日
    浏览(59)
  • nginx 转发数据流文件

    1.问题描述 后端服务,从数据库中查询日志,并生成表格文件返回静态文件。当数据量几兆时,返回正常,但是超过几十兆,几百兆,就会超过网关的连接超时时间30秒。 时序图  这里面主要花费时间的地方在: 1后台服务器,将数据格式化,写到本地的文件的过程 2后台服务

    2024年02月06日
    浏览(43)
  • 后端返回数据流,前端进行转换blob文件流

    1. 首先相应的头里面请求改为 responseType: \\\'blob\\\' 2.           let res = await getPhotoVideoUrl() --此处为模拟的获取一个视频流的地址;         const img = new Blob([res], { type: \\\'image/png\\\' });         let imgUrl = window.URL.createObjectURL(img); 3.拿到流的地址后,先进行new Blob进行创建一个对象。

    2024年02月13日
    浏览(42)
  • <JavaEE> 文件IO -- 数据流和文件内容操作(Reader 和 Writer 、InputStream 和 OutputStream)

    目录 一、数据流概述 二、流的关闭 2.1 使用 close() 方法 2.2 使用 try-finally 2.3 使用 try-with-resources 三、字符流的读写 3.1 Reader 类 3.2 Writer 类 四、字节流的读写 4.1 InputStream 类 4.2 OutputStream 类 1)在 Java 中,文件的操作分为两类 操作文件系统 通过 File 类,在系统中进行增、删

    2024年02月04日
    浏览(43)
  • 什么是Vue的数据流(单向数据流)?如何进行数据流管理

    在Vue中,数据流是指数据的传递和管理方式。Vue采用的是单向数据流,也就是说,数据是从父组件流向子组件,子组件不能直接修改父组件的数据。本文将介绍Vue的数据流机制,以及如何进行数据流管理。 Vue的数据流机制可以分为两类:props和events。 Props 在Vue中,父组件可以

    2024年02月08日
    浏览(62)
  • 银行储蓄系统的顶层数据流图及细化数据流图

    绘制出银行储蓄系统的顶层数据流图及细化数据流图; 银行储蓄系统存、取款流程如下: 1)业务员事先录入利率信息; 2)如果是存款,储户填写存款单,业务员将存款单键入系统,系统更新储户存款信息(存款人姓名、存款人账号、电话号码、身份证号码、存款金额、存

    2024年01月17日
    浏览(48)
  • Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

    警告 :此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。 在本教程中,我们将了解如何将现有数据流(data stream)从索引生命周期管理 (ILM) 迁移到数据

    2024年04月29日
    浏览(46)
  • 数据流图(DFD)

    数据流图是用于表示系统逻辑模型的一种工具。从数据 传递和加工 的角度,以图形的方式描述数据在系统中流动和处理的过程 数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是 对数据流图中的各个元素做出详细的说明 ,

    2024年02月04日
    浏览(51)
  • postman 数据流请求

    备注: Postman version : Version 9.21.3 Windows 版本 1.修改headers 2.Body 部分 选择raw 格式数据 3.最后执行请求

    2024年02月11日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包