Xstream在未完成时停止写入文件

时间:2019-07-07 21:44:41

标签: java xml

我已经写了一些代码来为以前写过sql的用户生成密码。然后,我想将每个用户名和密码写入xml。该代码似乎可以正常工作,只是在第200个用户处它突然停止在xml标记的一半并结束,这很奇怪。我正在使用Xstream作为我的库。 Arraylist有215位用户。

我尝试了StaxDriver和DomDriver。 Stax Driver结果与空Xstream构造函数相同,但Dom甚至更糟。

serialized
pyspark

Zakaznik是非常基本的对象,带有用户名,密码,ID ......

削减就像

        XStream xstream = new XStream();
        xstream.alias("Zakaznici", ListZakazniku.class);

        try {
            PrintWriter out = new PrintWriter("Zakaznici.xml");
            out.write(xstream.toXML(ListZakazniku.zakaznici));
        }catch (Exception e){
            e.printStackTrace();
        }

我不知道这是怎么回事。我期待任何建议:)

1 个答案:

答案 0 :(得分:0)

您的列表不应是静态的,还应稍微修改您的打印代码。这样的方法会很好地工作:

@XStreamAlias("listZakazniku")
public class ListZakazniku {

    private List<Zakaznik> zakaznicis;

    public ListZakazniku() {
        zakaznicis = new ArrayList<Zakaznik>();
    }

    public void add(Zakaznik user) {
        zakaznicis.add(user);
    }


    @XStreamAlias("zakaznik")
    private static class Zakaznik {
        private String user;
        private String pwd;
        public Zakaznik(String user, String pwd) {
            this.user = user;
            this.pwd = pwd;
        }
    }


    public static void main(String[] args){
        XStream xstream = new XStream();
        xstream.processAnnotations(ListZakazniku.class);
        ListZakazniku ll = new ListZakazniku();
        ll.add(new Zakaznik("user1", "pwd1"));
        ll.add(new Zakaznik("user2", "pwd2"));
        try {
            try (PrintWriter out = new PrintWriter("Zakaznici.xml")) {
                out.println(xstream.toXML(ll));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

输出:

<listZakazniku>
  <zakaznicis>
    <zakaznik>
      <user>user1</user>
      <pwd>pwd1</pwd>
    </zakaznik>
    <zakaznik>
      <user>user2</user>
      <pwd>pwd2</pwd>
    </zakaznik>
  </zakaznicis>
</listZakazniku>

不要忘记为每个带注释的类调用processAnnotations! (同样,您的Zakaznik不是内部静态类,我想像上面的示例一样,它只是挤入了完整的代码。)