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、显式定义serialVersionUID
3、保证类内部的所有属性也必须可序列化
4、static、transient的成员变量不能被序列化
*/
@Test
public 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();
}
}
}
}
/*
反序列化
*/
@Test
public 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:用到再学。