文件
1)定义路径
2)创建文件类File file = new File("filepath");
3)文件类常用方法:file.exists判断文件是否存在
file.mkdir创建目录
file.createNewFile创建新文件
流的分类
1)按操作数据单位不同分为:字符流(8bit)二进制文件、字符流文本文件。
2)按数据的流向不同可分为:输入流、输出流。
3)按流的角色不同可分为:节点流、处理流(包装流)。
字节流
字节输入流FileInputStream
FileInputStream是一个以字节为单位向内存中读入数据的流。
FileOutputStream是一个以字节为单位像文件中写入数据的流。FileOutputStream构造器的参数有地址和是否覆盖输入选项。
字符流
FileReader是以字符为单位向内存中读入数据的流。
FileWriter是以字符为单位向文件中写入数据的流。
注意FileWriter使用后必须关闭流(close)或刷新(flush),否则写入不到指定文件。
节点流
节点流是对一种特定数据源进行读写的流。如FileReader、Fi了Writer、FileInputStream、FileOutputStream都是对文件进行读写的流,还有对数组进行读写的流,对管道进行读写的流,对字符串进行读写的流等等。每种节点流只能对自己对应数据类的的数据进行读写。
包装流
包装流也叫处理流,是把节点流包装起来,当你需要读写文件时初始化成文件读取流,当你需要读取数组时初始化成数组读取流。即在节点流的基础上提供更灵活强大的读写功能。
BufferedReader和BufferedWriter属于字符型处理流,按照字符来处理数据,关闭流时只需要关闭外层流。
//初始化一个BufferedReader处理流,需要读什么类型的数据在构造器中传入什么类型的节点流即可
BufferedReader bufferedreader = new BufferedReader(new FileReader(filepath));
BufferedReader提供的一些方法如下,其他处理流的方法查阅JDK;
BufferedInputStreamr和BufferedOutputStream属于字节型处理流,按照字符来处理数据,关闭流时只需要关闭外层流。
//初始化一个BufferedInputStream处理流,需要读什么类型的数据在构造器中传入什么类型的节点流即可
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filepath));
对象流
对象流是能够同时读写数据和数据类型的流。从程序中保存值和数据类型成为序列化,将保存在文件中的数据重新恢复成某对象称为反序列化。
注意需要让某个对象支持序列化机制,则必须让其类是可序列化的,即该类必须实现Serializable接口
ObjectOutputStream 提供 序列化功能
ObjectInputStream 提供 反序列化功能1)读写顺序要一致
2)要求序列化或反序列化对象 ,需要 实现 Serializable
3)序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性
4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员
5)序列化对象时,要求里面属性的类型也需要实现序列化接口
6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实
现了序列化
标准输入输出流
System.in 标准输入,类型为InputStream,默认从键盘输入。
System.out 标准输出,类型为PrintStream,默认从显示器输出。
转换流
InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成(转换)Reader(字符流)
OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)
当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流。
Properties
专门用于读取配置文件的集合类
配置文件一般格式为:键=值。不需要有空格,值不需要用引号引起来,默认为String类型。
常用方法