IO流2.0 缓冲流 序列化 字符打印 printf格式 压缩流 工具包
04 缓冲流Buffered
4.1字节缓冲流
4.2 字符缓冲流
newLine();在底层自动识别操作系统类别和换行符 其实就是输出换行符;
4.2.1 BufferedReader(字符为单位 尽量用于文本文件)
不要去操作 二进制文件[声音,视频 ], 可能造成文件损坏
throws Exception {
String filePath = "e:\\a.java";
//创建bufferedReader
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
//读取
String line; //按行读取, 效率高
//说明
//1. bufferedReader.readLine() 是按行读取文件 返回一个字符串
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line); //2. 当返回null 时,表示文件读取完毕
}
//关闭流, 这里注意,只需要关闭 BufferedReader(外层流),因为底层会自动的去关闭 节点流
/*
public void close() throws IOException {//底层源码 自动关闭节点流
synchronized (lock) {
if (in == null)
return;
try {
in.close();//in 就是我们传入的 new FileReader(filePath), 关闭了.
} finally {
in = null;
cb = null;
}
}
} */
bufferedReader.close();
}
4.2.2 BufferedWriter
{ String filePath = "d:\\ok.txt";
//创建BufferedWriter 说明:
//1. new FileWriter(filePath, true) 表示以追加的方式写入
//2. new FileWriter(filePath) , 表示以覆盖的方式写入
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
bufferedWriter.write("hello, 韩顺平教育!");
bufferedWriter.newLine();//插入一个和系统相关的换行
bufferedWriter.write("hello2, 韩顺平教育!"); bufferedWriter.newLine();
bufferedWriter.write("hello3, 韩顺平教育!"); bufferedWriter.newLine();
//说明:关闭外层流即可 , 传入的 new FileWriter(filePath) ,会在底层关闭
bufferedWriter.close();
}
4.3综合练习
四种方式拷贝文件
把《出师表》按段落顺序恢复到新txt文件里; 法2:Tree集合自动排序
5.0转换流(字节流与字符流转换)
5.1序列化(对象处理)流
5.1.1ObjectInputStream ObjectOutputStream
5.1.2 序列化流细节
如果javabeen类改动 也会改变版本号 解决方法:固定版本号
idea设置 (根据javabeen)自动生成版本号
勾选两条 新版本idea中 class without 'serialVersionUID'在JVM中
5.1.3综合练习
应用ObjectOutputStream 序列化一个Dog(name,age)并保存到data.dat文件中
throws Exception {
//序列化后,保存的文件格式,不是存文本,而是按照他的格式来保存
String filePath = "e:\\data.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
//序列化数据到 e:\data.dat
oos.writeInt(100);// int -> Integer自动装箱 (实现了 Serializable)
oos.writeBoolean(true);// boolean -> Boolean (实现了 Serializable)
oos.writeChar('a');// char -> Character (实现了 Serializable)
oos.writeDouble(9.5);// double -> Double (实现了 Serializable)
oos.writeUTF("韩顺平教育");//String
//保存一个dog对象
oos.writeObject(new Dog("旺财", 10, "日本", "白色"));
oos.close();
System.out.println("数据保存完毕(序列化形式)"); }
5.2打印流
5.2.1字节打印流PrintStream
字节流底层没有缓冲区,开不开自动刷新都 所有数据直接写到文件目的地
5.2.2字符打印流PrintWriter
5.3解压缩流/压缩流 (Java只识别.ZIP压缩文件)
5.3.1解压缩流
zip.close();}
5.3.2 压缩流
ZipEntry entry=new ZipEntry("aaa//a.txt"); // 参数如果是多级 可表示创建多级文件夹
5.3.3 常用工具包(Commons-io)
5.3.4 常用工具包(Hutool) Hutool — 🍬A set of tools that keep Java sweet.
本文来自博客园,作者:软工菜鸡,转载请注明原文链接:https://www.cnblogs.com/SElearner/p/17676701.html