Java笔记 --- 六、IO流

六、IO流

概述

分类

  • 纯文本文件:Windows自带的记事本打开能读懂的

eg:txt文件,md文件,xml文件,lrc文件

IO流体系

字节流

FileOutputStream

  • 操作本地文件的字节输出流,可以把程序中的数据写到本地文件中

  1. 创建字节输出流对象

  2. 写数据

  3. 释放资源

写数据的3种方式

FileInputStream

  • 操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中

  1. 创建字节输入流对象

  2. 读数据

  3. 释放资源

循环读取

一次读取多个字节

  • 文件拷贝,write要从0索引开始,长度为读取到的len

计算机存储

  • 计算机最小的存储单元:字节

  • 一个字节有8位,8个比特位 eg:0111 1100

  • 1开头的两个字节是中文,高位字节的第一位是1

  • 0开头的一个字节是英文

编码与解码

字符流

FileReader

  • 缓冲区:8192的字节数组

  • 读取的时候先读取缓冲区,没有的从文件中获取数据,转到缓冲区中

FileWriter

  • 缓冲区装满,会自动保存

  • flush,自动刷新,还可以继续写数据

  • close,无法继续写数据

缓冲流(包装)

eg:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));

  • Windows:/r/n

  • Linux/n

  • Mac:/r

转换流

  • 字符流与字节流的桥梁

  • 是字符流的子类

  • 把字节流装换成字符流 InputStreamReader

  • 把字符流装换成字节流 OutputStreamWriter

eg:

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"), "GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");

JDK11版本替代

字符流本身可以指定编码格式

eg:

FileReader fr = new FileReader("a.txt", Charset.forName("GBK"));
FileWriter fw = new FileWriter("b.txt",Charset.forName("UTF-8"));

序列化流(包装字节流)

  • 对象操作输出流:把Java中的对象写在本地中

  • 写出的时候要在对象类中是实现一个Serializable接口

  • Serializable是一个标记型接口,没有抽象方法

反序列化流(包装字节流)

  • 对象操作输入流:把序列化的文件中的对象读取到程序中

  1. 版本号:修改对象类之后,还可以保证读取到文件对象

    eg:

    private static final long *serialVersionUID* = 1L;

  2. transient:瞬态关键字

    不会把当前的属性序列化到文件中

  3. 序列化多个对象时,将对象放到一个集合中

    反序列化读取时,可以直接读取一个集合(强转Object),在进行集合遍历

打印流(包装输出流)

字节打印流

字符打印流

  • 字符流底层有缓冲区,想要自动刷新需要开启

image-20240205122429897

解压缩流/压缩流

解压缩流

image-20240205125045801

压缩流

单个文件

image-20240205125505884

文件夹
  • 递归

Common-is

image-20240205130505314

image-20240205130653360

image-20240205130745647

image-20240205130828050

Hutool工具包

properties配置文件

  • 读取:load()方法

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

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

相关文章

vue3-内置组件-Transition

基于状态变化的过渡和动画(常用) 建议多看几遍~~。然后动手去写写,学编程只有多动手才能有感觉。 内置组件: 它在任意别的组件中都可以被使用,无需注册。 Vue 提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动…

蓝桥杯省赛无忧 课件108 ST表

01 RMQ问题 02 ST表 03 区间最大值

Python程序设计 函数

简单函数 函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。 函数的使用包含两个步骤: 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用,在开发程序时,使用…

C语言之数据在内存中的存储

目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断什么是大小端?为什么有大小端?练习1练习2练习3练习4练习5练习6 3. 浮点数在内存中的存储浮点数存的过程浮点数取得过程练习题解析 1. 整数在内存中的存储 在讲解操作符的时候,我们已经…

图片解码显示

本文主要探讨基于s5pv210实现图片解码显示项目。 项目概述: 硬件:s5pv210(已移植uboot,kernel,busybox,已搭建tftp,已挂在ntfs) 软件:ubuntu14(已搭建tftp,搭建ntfs) 项目功能:基于s5pv210实现对bmp,jpeg,png三种图片的解析和显示…

RK3568平台 设备模型基本框架-kobject 和kset

一.什么是设备模型 字符设备驱动通常适用于相对简单的设备,对于一些更复杂的功能,比如说电源管理和热插拔事件管理,使用字符设备框架可能不够灵活和高效。为了应对更复杂的设备和功能,Linux内核提供了设备模型。设备模型允许开发…

C# 使用 MailKit 发送邮件(附demo)

C# 使用 MailKit 发送邮件(附demo) 介绍安装包(依赖)案例简单代码属性介绍:MailboxAddress属性介绍:BodyBuilderSMTP 服务器端口SSL的案例:非SSL: 介绍一下SMTP 介绍 MailKit 是一…

vue - 指令(一)

看文章可以得到什么? 1.可以快速的了解并会使用vue的指令 2.可以加深你对vue指令的理解,知道每个指令代表什么功能​​​​​​​ 目录 什么是vue的指令?​​​​​​​ vue常见指令的使用 v-html v-show v-if v-else 和v-else-…

N-143基于springboot博客系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:AdminLTEHTML 服务端技术:springbootmybatis-plusthymeleaf 本项目分前台和后台,主要有普…

VC++ 头文件中又包含其他头文件的问题

一开始代码是如下,当前项目中没有UIlib.h这个头文件,项目需要这个头文件; 如果新建一个UIlib.h文件,并把它的源代码全部拷贝进此文件中,这样项目中就有UIlib.h头文件, #include "UIlib.h" 这句不…

用握力器玩谷歌小恐龙游戏(三)

往期回顾 用握力器玩谷歌小恐龙游戏(一) 用握力器玩谷歌小恐龙游戏(二) GS-GAME-PC 前言 这次更新主要是,将原来的使用Wifi Mesh串口接收上位机的方法,改成了蓝牙直连电脑的方式,这种方式的…

Codeforces Round 914 (Div. 2)(D1/D2)--ST表

Codeforces Round 914 (Div. 2)(D1/D2)–ST表 D1. Set To Max (Easy Version) 题意: 给出长度为n的数组a和b,可以对a进行任意次数操作,操作方式为选择任意区间将区间内值全部变成该区间的最大值, 是否有可能使得数组a等于数组b…