使用对象处理流ObjectOutputStream读写文件
2023-12-13 17:07:09
注意事项:
1.创建的对象必须实现序列化接口,如果属性也是类,那么对应的类也要序列化
2.读写文件路径问题
3.演示一个例子
(1)操作的实体类FileModel,实体类中有Map,HashMap这些自带的本身就实现了序列化。
public class FileModel implements Serializable {
public Map<String, FileModel> subMap = new HashMap<String, FileModel>();
private String name;
private int attr;
private int startNum;
private int size;
private String content;
private FileModel father = null;
public FileModel(String name){
this.name = name;
}
public FileModel(String name, int startNum, int size) {
this.name = name;
this.attr = 2;
this.startNum = startNum;
this.size = size;
}
public FileModel(String name, int startNum) {
this.name = name;
this.attr = 3;
this.startNum = startNum;
this.size = 0;
}
//getter,setter方法...
}
(2)创建对象,并将其写到mode.dat文件当中
public static void write() {
FileModel root = new FileModel("root");//不占用
FileModel fileModel = new FileModel("kk.txt", 2);
fileModel.setSize(2);
FileModel fileModel1 = new FileModel("aa.txt", 3);
root.subMap.put("kk.txt", fileModel1);
root.subMap.put("aa.txt", fileModel1);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file-system/src/model.dat"))) {
oos.writeObject(root);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
这里注意路径问题,
首先,看一下我的项目结构,可以使用相对路径或者绝对路径来读写,使用绝对路径,即从磁盘开始,即“D:\operating-system\file-system\src\model.dat” ; 使用相对路径,即相对当前项目目录operating-system,如上面代码中的“file-system/src/model.dat”。
(4)从model.dat文件当中读取
public static void read() {
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file-system/src/model.dat"))){
FileModel fileModel = (FileModel)ois.readObject();
String name = fileModel.getName();
Map<String, FileModel> subMap = fileModel.subMap;
System.out.println(name);
subMap.forEach((s, fileModel1) -> System.out.println(s + "----->" + fileModel1.getName()));
}catch (IOException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
截图:
文章来源:https://blog.csdn.net/m0_59925573/article/details/134960975
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!