Java:File类 IO流相关

发布于:2025-04-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

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工具类