使用对象处理流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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。