IO流整体总结
总结的时候要有体系:流向,单位和功能
字节流InputStream和OutputSream
- 首先是所有字节流的超类:InputStream和OutputStream
- 接着是操作文件的子类:FileInputStream和FileOutputStream
- 在它们之上有个字节高级缓冲流:BufferedInputStream和BufferedOutputStream
- 这些流的主要方法都是read()和write(),都可以向里面传递byte数组作为缓冲区
- 另外高级流写出的时候要注意flush()刷新,不然数据还是停留在缓冲区中
- 最后关闭的时候高级流底层会自动关闭底层流
ObjectOutputStram序列化和ObjectInputStream反序列化
- 它是一个高级流,同样需要底层流支持
- 被序列化的对象需要实现Serializable接口,包括其中的对象属性也是一样
- 被transient修饰的属性不会被序列化
- 静态的成员也不会被序列化,因为静态成员属于类本身所有的东西
- 可以添加一个SerialVersionUID来确认序列化和反序列化双方是否一致
字符流Reader和Writer
这两个类是所有字符流的超类
- 文件字符流:FileReader和FileWriter
- 字符流不可以操作二进制文件,因为0,1转换成char后会乱码
- 字符高级缓冲流BufferedReader和BufferedWriter也需要底层支持
- 它们拥有独有的操作一行的方法:readLine()和newLine()
- 其他的用法和字节流一样
高级流在底层流的基础上增强功能,都需要底层流支持
- 桥转换流InputStreamReader和OutputStreamWriter用来在内存和存储设备间,进行字符和字节间的编码转换
- 打印流PrintStream和PrintWrite主要用来向文件中打印数据
- 它们独有的print系列方法可以直接原样打印,而所有的write()都会将数据转换成char类型
- 两者的区别就是一个拥有操作字节的方法,一个没有.决定了谁可以来操作二进制文件
- Properties配置文件流主要用来操作后缀名.properties的配置文件
- 使用setProperty()和get(key)来存取流中数据
- 它是一个键值对模式,只能存储字符串
- 它的存储和加载方法是store()和load(),可以在存储时配置注释.但是读取时不可读取被注释的内容
- 它的获取键集合方法stringPropertyNames()和getPropertyNames(),分别返回Set和Enumeration集合
File类
- 可以用来对文件或文件夹进行增删改查,判断文件属性等
- 获取文件夹内文件的方法listFiles()可以传入FileFilter或FilenameFilter接口
- 通过实现其accept()来进行以文件名和文件格式的文件过滤,只返回特定的文件
- 重点是通过递归的方式,来获取文件夹中的所有文件,或子类文件夹文件
- 原理就是foreach遍历文件夹中所有文件,如果还是文件就调用方法本身递归
- 不然就直接操作文件:如删除等.