File类:
注意区分不同构造器的参数区别。
路径分为相对路径和绝对路径,相对路径就是在当前路径(Module路径)继续指定路径,绝对路径就是完整的路径。
如果使用@test进行测试,相对路径在当前Module下,如果使用main()方法测试,相对路径就是当前Project。
Windows系统用“/”来切分路径,Unix用“\”。
IO流:
依据数据单位分为:字节流、字符流;~流向~~:输出流、输入流;~角色~~:节点流、处理流。

上方是父类,下方是子类,深色重点关注。后缀表示父类
说明:
1、字节流主要用于处理非文本文件,字符流主要用于处理文本文件;
2、缓冲流会在运行内存中制造一个8K的缓冲区,这样做的原因是从内存中提取数据比从磁盘中效率高,可以提高读写速度;
3、转换流提供字节流与字符流之间的转换(请注意编码表的使用);
4、数据流用来读写基本数据类型。
针对读入hello.txt文件的说明(使用FileReader()方法):
1、read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1;
2、异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally来处理(应注意流的关闭)。
read()还有一个构造器叫read(char[] cbuf),可以读取指定数量的字符,用的时候注意字符长度的问题。
针对写出hello.txt文件的说明(使用FileWriter()方法):
1、输出操作,对应的File可以不存在。如果不存在,在输出的过程中,会自动创建此文件;
2、使用FileWriter()的不同构造器可以实现覆盖原文件夹与否;
3、其余与读入阶段类似。
搞清楚输入流输出流的步骤以及异常抛出。
对象流:
package com.ObjectInputOutputStreamTest;import org.junit.Test;import java.io.*;public class ObjectInputOutputStreamTest {/*序列化过程:将内存中的java对象保存到磁盘中或同故宫网络传输出去,使用ObjectOutputStream实现序列化需要对象满足要求要求如下:1、实现Serializable接口(此接口为标识接口)2、显式定义serialVersionUID3、保证类内部的所有属性也必须可序列化4、static、transient的成员变量不能被序列化*/@Testpublic void testObjectOutputStream(){ObjectOutputStream oos = null;try {oos = new ObjectOutputStream(new FileOutputStream("object.dat"));oos.writeObject(new Person("樊睿",23));oos.flush();} catch (IOException e) {e.printStackTrace();} finally {if(oos != null){try {oos.close();} catch (IOException e) {e.printStackTrace();}}}}/*反序列化*/@Testpublic void testObjectInputStream(){ObjectInputStream ois = null;try {ois = new ObjectInputStream(new FileInputStream("object.dat"));Object obj = ois.readObject();Person p = (Person) obj;System.out.println(p);} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} finally {try {ois.close();} catch (IOException e) {e.printStackTrace();}}}}
随机存取文件流RandomAccessFile:
1、直接继承于java.lang.object类,实现了DataInput和DataOutput接口;
2、RandomAccessFile既可以作为一个输入流,又可以作为一个输出流;
3、RandomAccessFile作为输出流,写出到的文件如果不存在,会自动创建;如果写出到的文件存在,则会对原有文件内容进行覆盖(默认从头覆盖,可以通过改变指针来改变覆盖的位置),不会覆盖整个文件夹;
NIO:用到再学。
