只记:
1. Stream:面向字节流 byte[ ]编写!
2. Reader/Writer:面向字符流 char[ ]编写!(中文要用字符流,字节流读会乱码)
小知识:
IDEA默认文件路径是项目Project的根文件下(模块同级的文件)
注意文件复制要把文件名写在目的地址中,不然会出现拒绝访问!
注意:这里的所有异常建议try…catch…finally(老师后面的例题为了简便直接throws了)
都在java.io.*
纯文本文件:能用记事本直接编辑的文件!(普通文本文件和后缀名无关,不一定是.txt)
重点
怎么放的就怎么读:(读放对应)放了两个对象就要读两次,放一个List(有多个对象),也只需要读一次(读出这个List)。
- 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
- 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
FileInputStream
Stream:面向字节流 byte[ ]编写!
另一个无参read()方法每次读取一个字节,将读到的数据以int型返回(ASCLL码值)
byte数组是在内存中开辟的,每次读的数据【流】进内存,填入开辟的byte数组中。
int available() :
long skip(long a): 跳过几个字节不读
FileOutputStream
Copy
任何文件都可以copy
FileOutputStream的 write(byte b[ ], int off, int len) 方法:
FileReader
Reader/Writer:面向字符流 char[ ]编写!
字符流只能读普通文本,连word文件都不能读!
照葫芦画瓢:(拥有的方法都一样)
FileWriter
可以直接写String:
copy
要学会先搭架子(写注释啊大哥!!!)
BufferedReader
而BufferedInputStream就没有readLine()
IntputStreamReader
BufferedWriter
数据流
标准输出流
PrintStream为例:
System.out就是一个标准输出流!
创建日志工具类
java.io.File
Object类的直接子类
主要方法:
重要:mkdir()与mkdirs()
序列化 反序列换
ObjectOutputStream 序列化
ObjectInputStream 反序列化
(反)序列多个对象
transient
序列化版本号
- 凡是实现Serializable接口就会拥有一个序列化版本号
- 可以手动设置,否则JVM会自动分配
- 若由JVM自动分配,则若改动类JVM会重新分配(且JVM先用类名区分类,类名相同的用序列化版本号进行区分)
- 对象的序列化版本号在序列化前后不变,才能进行反序列化
所以建议给类手动提供一个不变的序列化版本号(随便设置一个数字就行,保证在自己的项目中不会重复 IDEA可以自动生成)
如,Java中的对象类都有固定序列化版本号
IO与Properties
Properties中的 load(InputStream/reader)方法:
资源绑定器包装了IO与Properties
ResourceBundle
管道实现线程之间的通信流