File类
File对象就是一个路径,可以是文件的路径、也可以是文件夹的路径

一:

二:

三:

File成员方法:
判断获取

String str = new String("C:\\Users\\16338\\test2\\test.txt");
File test = new File(str);
System.out.println(test.exists());
System.out.println(test.isDirectory());
System.out.println(test.isFile());
System.out.println(test.length());
length方法无法判断文件夹的大小
创建删除

createNewFile()

mkdir()

mkdirs()

delete()

遍历并获取

listFiles()细节



IO流

输入流
输出流
字节流

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



一次性写多个数据就要创建数组

换行符为"/r/n"
可调用String的getbytes()方法将字符串转为数组
格式字符基本与字符串的的一样
诺要续写,者需要把续写开关打开,就是创建流的第二个参数改为true,这个创建流的时候就不会先将文件的内容清空
InputStream
FileInputStream

每次read都会读取一个字符,然后再次read则会读取下一个字符

一次读取多个字节


示意图:
读了几个就写进去几个

为了避免读取时数据不是整数倍于数组,就可以规定数组要覆盖的范围

接口AutoCloseable自动释放资源
需要实现autocloseable接口

字符流
字符流底层就是字节流
特点


在UTF-8编码规则下,一个汉字用三个字节表示,英文用一个字节


Java中的编码方法

Java中的解码方法

使用不同的编码方式


Reader
实现类FileReader
创建字符输入流的对象

如果文件不存在就直接报错
读取数据

按字节读取如果遇到中文,一次读取多个字节,读取后解码,返回一个整数
读到文件末尾,read方法返回-1
细节


释放资源

Writer
实现类FileWriter
构造方法

成员方法

字符流底层原理解析

flush和close方法:


IO:缓冲流

字节缓冲流
底层自带了长度为8192的缓冲区提高性能
构造方法

字符缓冲流
构造方法

输入

输出


IO转换流

是字符流和字节流之间的桥梁,相当于把字节流转换为字符流

输入
这种方式被淘汰了

而是用这种方法JDK11后才能用

输出
用转换流,已经淘汰

JDK11后用此

序列化流
作用:可以把java中的对象写到本地文件中


使用对象输出流将对象保存到文件时会出现NotserializableException
异常
解决方案:需要让Javabean类实现Serializable接口(标记型接口,没有抽象方法,标记可以被写入文件)

反序列化流



序列化流:序列号
如果类实现接口Serializable,标志可以被写入文件,就会根据类中的成员变量,静态变量,构造方法,成员方法来生成一个序列号,将其实现的对象写入文件中时也会将序列号写入,如果修改了类,序列号也会改变
解决方法
给类一个固定的序列号:

也可以在IDEA设置中勾选下面两个选项

然后再实现接口Serializable后可以自动生成一个序列号

如果不想被序列化

要写入多个对象
创建实现了Serializable集合,例如ArrayList集合,将要添加的对象添加进去,再把集合写入文件中,即可。读取时要把读取到的强转化为ArrayList<>
写入

读取

打印流
1·打印流只能操作文件的目的地,不能操作数据源
2·特有的写出方法可以实现,数据原样写出

3·特有的写出方法,可以实现自动刷新,自动换行
打印一次数据 = 写出+换行+刷新
字节打印流(PrintStream)
构造方法

成员方法

示例

字符打印流(PrintWriter)

构造方法

成员方法

压缩流

压缩
压缩包里面的每一个文件都是文件或文件夹,都是一个zipentry对象


解压缩流

Commis-io(第三方工具)

Hutool工具包

IO工具类
