对象序列化工具类
- 需要更换实体类,且使用ArrayList集合,序列化和反序列化的单位是集合
- 这是程序中对象与文件间的序列化和反序列化。
- 序列化流不仅可以文件上的对象传输,还可以网络上的对象传输
/**
* 数据持久化工具类
* 1.读取文件-->将数据转成集合
* 2.将集合-->写入文件
* 传递的是对象,使用序列化流最方便,对象的序列化操作。
*/
public class IOUtil {
private static File file=new File("快递信息.txt");//相对路径
/**
* 将数据(集合)写入文件
* 使用序列化流,写到文件的是对象的二进制数据,在文本中是乱码
* @param list
*/
public static void writeToFile(ArrayList<Express>list) {
//将文件流转成序列化流,使用JDK9的异常处理,自动释放资源
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))){
oos.writeObject(list);//将整个集合序列化到文件中
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 从文件读取数据,使用反序列化流,将二进制读成集合对象
* 要预防文件不存在时的异常,保证可以拿到一个集合(即使是空的)
* @return
*/
public static ArrayList<Express> readFromFile(){
if (!file.exists()||file.length()==0) return new ArrayList<>();
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))){
return (ArrayList<Express>) ois.readObject();//读成一个集合并返回
} catch (IOException |ClassNotFoundException e) {
e.printStackTrace();
}
return new ArrayList<>();
}
}