JAVA_IO_流
概念:内存与存储设备之间传输数据的通道。 水借助管道传输;数据借助流传输。
分类:
-
按方向【重点】:以内存为参照
-
输入流:将<存储设备>中的内容读入到<内存>中
-
输出流:将<内存>中的内容写入到<存储设备>中
-
-
按单位
-
字节流:以字节为单位,可以读写所有数据。
-
字符流:以字符为单位,只能读写文本数据。
-
-
按功能
-
节点流:具有实际传输数据的读写功能。
-
过滤流:在节点流的基础之上增强功能。
-
字节流
字节流的父类(抽象类):
InputStream: 字节输入流;此抽象类是表示字节输入流的所有类的超类。 包含方法:
-
abstract int read() 从输入流中读取数据的下一个字节。
-
int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
-
void close() 关闭此输入流并释放与该流关联的所有系统资源。
OutputStream:字节输出流;此抽象类是表示输出字节流的所有类的超类。 包含方法:
-
void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流。
-
void close() 关闭此输出流并释放与此流有关的所有系统资源。
-
void flush() 刷新此输出流并强制写出所有缓冲的输出字节。
文件字节流
字节流的子类
FileInputStream: 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 包含方法:与父类(字节输入流)类似
-
FileInputStream(String name) 构造方法,通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
-
public int read(byte[] b) //从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1。
FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。 包含方法:与父类(字节输入流)类似
-
public void write(byte[] b) //一次写多个字节,将b数组中所有字节,写入输出流。
-
void close() //关闭此文件输出流并释放与此流有关的所有系统资源。
字节缓冲流
缓冲流: BufferedInputStream/ Buffered0utputStream
-
提高I0效率,减少访问磁盘的次数;
-
数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
BufferedInputStream:为另一个输入流添加一些功能
主要字段
-
protected byte[] buf :存储数据的内部缓冲区数组。 主要方法:与父类(字节输入流)类似
-
BufferedInputStream(InputStream in):构造方法, 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
Buffered0utputStream:该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。 主要字段
-
protected byte[] buf :存储数据的内部缓冲区。
-
protected int count :缓冲区中的有效字节数。
主要方法:
-
BufferedOutputStream(OutputStream out) :构造方法,创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
-
void flush():刷新此缓冲的输出流。
-
void write(int b) :将指定的字节写入此缓冲的输出流。
对象流
对象流: 0bject0utputStream/0bjectInputStream
-
增强了缓冲区功能
-
增强了读写8种基本数据类型和字符串功能
-
增强了读写对象的功能:
-
read0bject()从流中读取一个对象
-
write0bject(Object obj)向流中写入一个对象
-
使用流传输对象的过程称为序列化、反序列化。
ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。 主要方法:
-
ObjectOutputStream(OutputStream out):构造方法,创建写入指定 OutputStream 的 ObjectOutputStream。
-
close(),flush(),八种基本数据类型的write()方法
-
void writeUTF(String str) :以 UTF-8 修改版格式写入此 String 的基本数据。
-
void writeObject(Object obj) :将指定的对象写入 ObjectOutputStream。
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。 主要方法:
-
ObjectInputStream(InputStream in) :构造方法,创建从指定 InputStream 读取的 ObjectInputStream。
-
close(),八种基本数据类型的read()方法
-
String readUTF():读取 UTF-8 修改版格式的 String。
-
Object readObject():从 ObjectInputStream 读取对象。
注意事项:
* (1)要求序列化类必须要实现Serializable接口
* (2)序列化类中对象属性要求实现Serializable接口
* (3)序列化版本号ID:保证序列化的类和反序列化的类是同一个类
* (4)使用transient(瞬时的)修饰属性,则这个属性不能被序列化
* (5)静态属性不能被序列化
* (6)序列化多个对象。可以借助集合实现
字符编码
-
ISO- -8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
-
UTF-8 针对Unicode码表的可变长度字符编码
-
GB2312 简体中文
-
GBK 简体中文、扩充
-
BIG5 台湾,繁体中文 当编码方式和解码方式不一致时,会出现乱码
字符流
字符流的父类(抽象类): Reader:字符输入流,用于读取字符流的抽象类。 主要方法:
-
protected Reader():创建一个新的字符流 reader,其重要部分将同步其自身的 reader。
-
close(),read()
-
long skip(long n):跳过字符
Writer:字符输出流,写入字符流的抽象类。
-
主要方法:
-
protected Writer():创建一个新的字符流 writer,其关键部分将同步 writer 自身。
-
append(),close(),flush(),write()
文件字符流
FileReader: 用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。
-
FileReader(File file):构造方法,在给定从中读取数据的 File 的情况下创建一个新 FileReader。
-
FileReader(String fileName):在给定从中读取数据的文件名的情况下创建一个新 FileReader。
-
public int read(char[] c):继承方法,从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
FileWriter:用于写入已过滤的字符流的抽象类。
-
protected FilterWriter(Writer out):构造方法,创建一个新的 filtered writer。
-
public void write(String str) //-次写多个字符,将b数组中所有字符,写入输出流。
-
close(),flush(),write()
字符缓冲流
缓冲流: BufferedReader/BufferedWriter
-
高效读写
-
态持输入换行符。
可一次写一行、读一行。 BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 主要方法:
-
BufferedReader(Reader in):构造方法,创建一个使用默认大小输入缓冲区的缓冲字符输入流。
-
String readLine():读取一个文本行。
-
close(),read(),skip()
BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
-
BufferedWriter(Writer out):构造方法,创建一个使用默认大小输出缓冲区的缓冲字符输出流。
-
void newLine():写入一个行分隔符。
-
close(),flush(),write()
打印流
PrintWriter:向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。
-
封装了print()/println() 方法,支持写入后换行。
-
支持数据原样打印 主要方法:
-
PrintWriter(String fileName):构造方法,创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
-
append(),close(),flush(),write()
-
print(),println()
转换流
桥转换流: InputStreamReader/0utputStreamWriter
-
可将字节流转换为字符流。
-
可设置字符的编码方式。
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
-
InputStreamReader(InputStream in):构造方法,创建一个使用默认字符集的 InputStreamReader
-
InputStreamReader(InputStream in, String charsetName):构造方法,创建使用指定字符集的 InputStreamReader。
-
String getEncoding():返回此流使用的字符编码的名称。
-
close(),read()
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。
-
OutputStreamWriter(OutputStream out):创建使用默认字符编码的 OutputStreamWriter。
-
OutputStreamWriter(OutputStream out, String charsetName):创建使用指定字符集的 OutputStreamWriter。
-
String getEncoding():返回此流使用的字符编码的名称。
-
close(),flush(),write()
File类
概念:代表物理盘符中的一个文件或者文件夹。文件和目录路径名的抽象表示形式。
File类的使用
-
(1)分隔符
-
(2)文件操作
-
(3)文件夹操作
方法:
-
File(String pathname):构造方法,通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
-
createNewFile()//创建一个新文件
-
mkdir()//创建一个新目录
-
delete()//删除文件或空目录
-
exists() //判断File对象所代表的对象是否存在
-
getAbsolutePath()//获取文件的绝对路径
-
getName()//取得名字
-
getParent()//获取文件/目录所在的目录
-
isDirectory()//是否是目录
-
isFile()//是否是文件
-
length()//获得文件的长度
-
listFiles()//列出目录中的所有内容
-
renameTo()//修改文件名为
FileFilter接口
public interface FileFilter
-
boolean accept(File pathname)
当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。
补充:Properties
Properties:属性集合
类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
特点:
-
存储属性名和属性值
-
属性名和属性值都是字符串类型
-
没有泛型
-
和流有关
主要方法:
-
Properties() 构造方法,创建一个无默认值的空属性列表。
-
String getProperty(String key) 用指定的键在此属性列表中搜索属性。
-
void list(PrintStream out) 将属性列表输出到指定的输出流。
-
void list(PrintWriter out) 将属性列表输出到指定的输出流。
-
void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。
-
void store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
-
Set<String>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· Windows 提权-UAC 绕过