有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我已经编写了一些代码来为以前写入sql的用户生成密码。然后我想将每个用户的用户名和密码写入xml。代码似乎运行良好,但在大约第200位用户时,它突然在xml标记的中途停止并结束,这非常奇怪。我正在使用Xstream作为我的库。Arraylist有大约215个用户

我试过StaxDriver和DomDriver。Stax驱动程序的结果与空的Xstream构造函数相同,但Dom更糟糕

        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();
        }
public class ListZakazniku {
    public static ArrayList<Zakaznik> zakaznici = new ArrayList<>();

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

    public void setZakaznici(ArrayList<Zakaznik> zakaznik){
        this.zakaznici.clear();
        this.zakaznici = zakaznik;
    }

    public static ArrayList<Zakaznik> getZakaznici() {
        return zakaznici;
    }

    public void add(Zakaznik elbow){
        zakaznici.add(elbow);
    }

Zakaznik是一个非常基本的对象,有用户名、密码、id

伤口就像

</Zakaznik>
<Zaka

我不知道它怎么了。我期待任何建议:)


共 (1) 个答案

  1. # 1 楼答案

    您的列表不应是静态的,还应稍微修改您的打印代码。这样的方法很管用:

    @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不是一个内部静态类,我想就像上面的例子一样,这只是为了压缩完整的代码。)