gpt4 book ai didi

Java列表序列化

转载 作者:行者123 更新时间:2023-12-01 10:11:44 25 4
gpt4 key购买 nike

我编写了一个java程序,需要保存我创建的名为User的对象的列表。这是我用于保存和加载列表的代码:

/**
* Save list to file
* @param saveList list to be saved
*/
public void saveUsers(List<User> saveList){
try{
FileOutputStream fileOut = new FileOutputStream("data/userlist.ser", true);
OutputStream out = new BufferedOutputStream(fileOut);
ObjectOutput output = new ObjectOutputStream(out);
output.writeObject(saveList);;
out.close();
fileOut.close();
output.close();
for(User u : saveList){
System.out.println(u.getUsername());
}
System.out.println("List written to file");
}catch(IOException e){
e.printStackTrace();
}
}
/**
*
* @return list of all users in system.
*/
@SuppressWarnings({ "resource", "unchecked" })
public static List<User> loadUsers(){

try{
InputStream saveFile = new FileInputStream("data/userlist.ser");
InputStream buffer = new BufferedInputStream(saveFile);
ObjectInput input= new ObjectInputStream(buffer);
LinkedList<User> loadList = (LinkedList<User>) input.readObject();
System.out.println(loadList.size());
for(User u : loadList){
u.reload();
System.out.println(u.getUsername());
}
return loadList;

}catch(Exception e){
e.printStackTrace();
}
List<User> l = new LinkedList<User>();
return l;
}

我的代码似乎适用于保存,因为每次调用它时的输出都会显示所有用户被添加到列表中,但是在加载时它只加载第一个用户。这是我的用户类别:

public class User implements Serializable{

/**
* Variables
*/
private transient StringProperty usernameProperty;
private String username;
private List<Album> albums = new LinkedList<Album>();
private List<Photo> photos = new LinkedList<Photo>();;
private List<Tag> tags = new LinkedList<Tag>();;
private static final long serialVersionUID = 1738L;

/**
* public constructor to create a user
* @param username
*/
public User(String username){
this.username = username;
this.usernameProperty = new SimpleStringProperty(username);
}

我的所有其他类也都实现了可序列化。是否有任何原因将列表保存到文件但未完全加载?

最佳答案

我找到了答案,显然每次我调用保存类时,我都没有覆盖文件而是附加到它,所以我只是读取存储的第一个数组列表,非常简单的修复我只是添加了行

                File file = new File("data/userlist.ser");
file.delete();

到我的 saveUsers 函数的开头来清除文件,现在它工作得很好。

关于Java列表序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36088960/

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