- 以二进制格式保存java对象为文件
- 加载保存的二进制文件,转为需要的对象
- 年级 Grade.java
package com.xzbd.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Grade implements Serializable {
private String name;
private String level;
}
- 学校 School.java
package com.xzbd.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class School implements Serializable {
private String name;
private String address;
private List gradeList;
}
- 工具类 IOUtil.java
package com.xzbd.demo;
import java.io.*;
import java.util.Objects;
public class IOUtil {
public static void saveBinaryFileFromObject(String fullPath, Object obj) {
ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;
try {
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
// 读取对象并转换成二进制数据
oos.writeObject(obj);
oos.flush();
File destFile = new File(fullPath);
if(!destFile.exists()){
destFile.createNewFile();
}
bos.writeTo(new FileOutputStream(destFile));
bos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static T loadModelFromFile(String fileName, Class tClazz) {
try {
File file = new File(fileName);
InputStream inStream = new FileInputStream(file);
return loadModelFromStream(inStream, tClazz);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static T loadModelFromStream(InputStream inStream, Class tClazz) {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(inStream);
Object obj = ois.readObject();
if (obj.getClass() == tClazz) {
return (T) obj;
} else {
System.out.println("######### 加载文件转对象失败 #########");
System.out.println("系统加载到的文件是:" + obj.getClass() + " 对象");
System.out.println("您希望的对象是:" + tClazz + " 对象");
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (Objects.nonNull(ois)) {
try {
ois.close();
inStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
- 测试类 Test.java
package com.xzbd.demo;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Grade grade1 = new Grade("一年级","1");
Grade grade2 = new Grade("二年级","2");
Grade grade3 = new Grade("三年级","3");
Grade grade4 = new Grade("四年级","4");
List gradeList = new ArrayList<>();
gradeList.add(grade1);
gradeList.add(grade2);
gradeList.add(grade3);
List gradeList2 = new ArrayList<>();
gradeList2.add(grade2);
gradeList2.add(grade3);
gradeList2.add(grade4);
School school = new School("小学","小学的地址",gradeList);
School school2 = new School("大学","大学的地址",gradeList2);
String file1 = "D:\z_tmp_data/school1";
String file2 = "D:\z_tmp_data/school2";
IOUtil.saveBinaryFileFromObject(file1,school);
IOUtil.saveBinaryFileFromObject(file2,school2);
School loadModelFromFile = IOUtil.loadModelFromFile(file1, School.class);
School loadModelFromFile2 = IOUtil.loadModelFromFile(file2, School.class);
System.out.println(loadModelFromFile.toString());
System.out.println(loadModelFromFile2.toString());
}
}
运行结果
-
输出的文件
-
加载回的数据,打印
- lombok



