gpt4 book ai didi

java - 本地类不兼容错误

转载 作者:行者123 更新时间:2023-11-30 10:41:28 26 4
gpt4 key购买 nike

下面的代码给我错误 InvalidClassException 我的 User 类实现了 Serializable 所以我迷路了。我正在尝试存储充满 User 对象的 list,然后能够读回它。

List<User> userList = new ArrayList<User>();//list used
try {
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(fileName, true));

os.writeObject(userList);
os.close();
} catch (IOException e1) {
e1.printStackTrace();
}

// input
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
userList = (List<User>) ois.readObject();
ois.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}

最佳答案

如果您尝试在文件中存储并稍后检索单个对象(在您的示例中为 List<>),您想要每次写入文件时附加到文件。相反,您希望每次都使用新对象覆盖文件。

// Write
List<User> userList = new ArrayList<User>();
try (FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(userList);
} catch (IOException e1) {
e1.printStackTrace();
}

// read
try (FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis)) {
userList = (List<User>) ois.readObject();
} catch (FileNotFoundException | IOException | ClassNotFoundException e1) {
e1.printStackTrace();
}

公告new FileOutputStream(fileName) true吗争论。使用 true参数表示你想打开文件进行“追加”。使用 false ,或完全关闭 append 参数,将打开文件进行“覆盖”。

注意事项:

我还使用了 try-with-resources声明我的例子。这消除了显式关闭流的需要;在 try { } 结束时,流会自动为您关闭 block 。

我还使用了 multi-catch子句,因为您没有以任何不同方式处理 3 个异常,所以它更简洁一些。

关于java - 本地类不兼容错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38472057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com