Java列表序列化

标签 java serialization

我编写了一个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/

相关文章:

java - 从 SimpleDateFormat 到 SimpleDateFormat 解析和格式化 DatePicker 日期

PHP反序列化JS序列化的变量字符串

c# - 序列化为 JSON(使用 Json.Net),同时忽略继承的成员

serialization - Symfony3 反序列化多个实体对象

java - Jersey - 请求的资源(未找到)不可用

java - 使用 jar 文件运行 Java 程序 (Netbeans/Maven) - 需要帮助

java - 将动态内容压缩到 ServletOutputStream

java - JMH 多个基准 单独运行的不同结果

python - 使用 django 将 python 集存储在数据库中

java - 如何判断哪个字段失败Gson序列化