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对象