如何编写要归档的对象集合?

时间:2015-03-14 13:58:24

标签: java eclipse

我正在尝试制作一组​​电影并将其保存到文件中。一切正常,直到我打开文本文件,我得到了这个:

“¬íssrjava.util.ArrayListxÒ™ÇaIsizexp w sr tema3ex1.movi​​e}ÆöôQ¹ªIidI ratingL categoryt Ljava / lang / String; L nameq~LreleaseDateq~xpýttSci-Fit Inceptiont  2010年7月30日x“

我搜索了很多,找不到一种方法来完成这项工作。我也得到“这个可序列化的类不会声明一个静态的最终版本”。 你能帮帮我吗?

    public class movie implements Serializable {

private String name;
private String category;
private String releaseDate;
private int rating;
private int id;

 public movie(String name, String category, String releaseDate, int rating, int id){
     this.name=name;
     this.category=category;
     this.releaseDate=releaseDate;
     this.rating=rating;
     this.id=id;

 }

 public void add(List<movie> list, movie A){
     list.add(A);       
}


public void delete(List<movie> list, movie A){
    list.remove(A);
}

public void save(List<movie> list) throws IOException{
    try {
        FileOutputStream fout = new FileOutputStream("tmp.txt");
        ObjectOutputStream out = new ObjectOutputStream(fout);
        out.writeObject(list);
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) throws IOException{  
    movie A = new movie("Inception", "Sci-Fi", " 30 July 2010", 8, 1375666);
    List<movie> list = new ArrayList<movie>();
    A.add(list, A);
    A.save(list);

}

2 个答案:

答案 0 :(得分:0)

我认为你想要一个带有人类可读文本的文件。为了实现这一点,您不能使用java序列化。您需要选择一种格式(如csv,xml,Json或其他),并获取序列化库来执行此操作。在这样做时,您可以在java中编写一个程序,该程序可以读取该文件并将其转换为对象(解析文件)。您可以使用Jackson CSV。

答案 1 :(得分:0)

  

“¬ísrjava.util.ArrayListxÒ™ÇaIsizexp w sr tema3ex1.movi​​e}ÆöôQ¹ª   我idI ratingL categoryt Ljava / lang / String; L nameq~L releaseDateq~   xpýttSci-Fit Inceptiont 2010年7月30日x“

你得到这种输出,因为你正在序列化你的对象。如果要以可读格式将ArrayList的内容保存到文件中,则需要使用其中一个编写器API类(如FileWriter)编写内容。

  

我也得到“这个可序列化的类不会声明静态   最终

这是一个警告,而不是编译错误。向类添加静态serialVersionUID的目的是提供一种方法来确保类在序列化和反序列化之间不会发生更改。想象一下,您序列化了一个包含2个字段的类。你运行你的应用程序,它序列化你的对象..到目前为止这么好。现在,您决定再向该类添加一个字段。您运行您的应用程序,它反序列化您的序列化对象。 JVM如何知道您的课程已经改变了?没错,它将序列化对象的serialVersionUID与类类型的serialVersionUID进行比较。如果发现id不匹配,则抛出异常。这意味着无论何时更改可序列化类,都应确保更改serialVersionUID字段的值以保护应用程序免受难以理解的问题。

请注意,虽然静态字段未被序列化,但serialVersionUID是一个特殊的标识符,其值被写入输出。