Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将ArrayList写入XML文件?_Java_Xml_Arraylist - Fatal编程技术网

Java 如何将ArrayList写入XML文件?

Java 如何将ArrayList写入XML文件?,java,xml,arraylist,Java,Xml,Arraylist,我试图将ArrayList存储到一个XML文件中,以便稍后检索信息,然后将其显示回控制台 有人能告诉我最有效的方法吗 编辑: 以下是我试图写入外部文件的内容 // new user is created Bank bank = new Bank(); System.out.println("Enter your full name below (e.g. John M. Smith): "); String name = scanner.nextLine(); System.out.print

我试图将
ArrayList
存储到一个XML文件中,以便稍后检索信息,然后将其显示回控制台

有人能告诉我最有效的方法吗

编辑:

以下是我试图写入外部文件的内容

// new user is created
Bank bank = new Bank();

System.out.println("Enter your full name below (e.g. John M. Smith): ");
String name = scanner.nextLine();
System.out.println("Create a username: ");
String userName = scanner.nextLine();
System.out.println("Enter your starting deposit amount: ");
int balance = scanner.nextInt();

System.out.print(dash);
System.out.print("Generating your information...\n");
System.out.print(dash);

int pin = bank.PIN();
String accountNum = bank.accountNum();

User user = new User(name, userName, pin, accountNum, balance);

//new user gets added to the array list
Bank.users.add(user);

System.out.println(user);

这一切都会创建一个银行用户,它被放入一个
ArrayList
,然后我想存储他们的信息,以便稍后可以返回并重新显示它。

我这样做的方式是使用XStream或Jackson API(首选)将java对象序列化为XML或JSON文件

例如,请参阅我编写的用于TestNG或JUnit参数化测试的代码

public static void main(String[] args) {
    // TODO Auto-generated method stub

    WriteFile ob = new WriteFile();
    ArrayList list = new ArrayList();
    list.add(new details("A", 20, 1));
    list.add(new details("B", 30, 2));

    ob.writeXmlFile(list);
}
//根据您的需要修改下面的类

class details {
String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

int age;
int id;

public details() {
}

public details(String name_, int age_, int id_) {
    name = name_;
    age = age_;
    id = id_;
}
//低于实际编写的类

public void writeXmlFile(ArrayList<details> list) {

    try {

        DocumentBuilderFactory dFact = DocumentBuilderFactory.newInstance();
        DocumentBuilder build = dFact.newDocumentBuilder();
        Document doc = build.newDocument();

        Element root = doc.createElement("Studentinfo");
        doc.appendChild(root);

        Element Details = doc.createElement("Details");
        root.appendChild(Details);


        for (details dtl : list) {

            Element name = doc.createElement("Name");
            name.appendChild(doc.createTextNode(String.valueOf(dtl
                    .getName())));
            Details.appendChild(name);

            Element id = doc.createElement("ID");
            id.appendChild(doc.createTextNode(String.valueOf(dtl.getId())));
            Details.appendChild(id);

            Element mmi = doc.createElement("Age");
            mmi.appendChild(doc.createTextNode(String.valueOf(dtl.getAge())));
            Details.appendChild(mmi);

        }

        // Save the document to the disk file
        TransformerFactory tranFactory = TransformerFactory.newInstance();
        Transformer aTransformer = tranFactory.newTransformer();

        // format the XML nicely
        aTransformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");

        aTransformer.setOutputProperty(
                "{http://xml.apache.org/xslt}indent-amount", "4");
        aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");

        DOMSource source = new DOMSource(doc);
        try {
            // location and name of XML file you can change as per need
            FileWriter fos = new FileWriter("./ros.xml");
            StreamResult result = new StreamResult(fos);
            aTransformer.transform(source, result);

        } catch (IOException e) {

            e.printStackTrace();
        }

    } catch (TransformerException ex) {
        System.out.println("Error outputting document");

    } catch (ParserConfigurationException ex) {
        System.out.println("Error building document");
    }
}
public void writeXmlFile(ArrayList列表){
试一试{
DocumentBuilderFactory dFact=DocumentBuilderFactory.newInstance();
DocumentBuilder build=dFact.newDocumentBuilder();
Document doc=build.newDocument();
元素根=doc.createElement(“Studentinfo”);
doc.appendChild(根);
元素详细信息=doc.createElement(“详细信息”);
root.appendChild(详细信息);
详细信息(dtl:列表){
元素名称=doc.createElement(“名称”);
name.appendChild(doc.createTextNode)(String.valueOf(dtl
.getName());
详细信息。追加子女(姓名);
元素id=doc.createElement(“id”);
id.appendChild(doc.createTextNode(String.valueOf(dtl.getId())));
详细信息。附加子项(id);
元素mmi=doc.createElement(“年龄”);
appendChild(doc.createTextNode(String.valueOf(dtl.getAge()));
详细信息。附件(mmi);
}
//将文档保存到磁盘文件
TransformerFactory transfactory=TransformerFactory.newInstance();
变压器变压器变压器=transfactory.newTransformer();
//很好地格式化XML
aTransformer.setOutputProperty(OutputKeys.ENCODING,“ISO-8859-1”);
aTransformer.setOutputProperty(
"{http://xml.apache.org/xslt}缩进金额,“4”);
aTransformer.setOutputProperty(OutputKeys.INDENT,“是”);
DOMSource=新的DOMSource(doc);
试一试{
//您可以根据需要更改XML文件的位置和名称
FileWriter fos=新的FileWriter(“./ros.xml”);
StreamResult结果=新的StreamResult(fos);
转换(源、结果);
}捕获(IOE异常){
e、 printStackTrace();
}
}捕获(TransformerException ex){
System.out.println(“输出文档时出错”);
}捕获(ParserConfiguration异常ex){
System.out.println(“错误构建文档”);
}
}

使用XMLEncoder/XMLDecoder怎么样

从javadoc中复制和解释

ArrayList arr = new ArrayList();
// populate your array
XMLEncoder e = new XMLEncoder(BufferedOutputStream(
                          new FileOutputStream("Test.xml")));
   e.writeObject(arr);
   e.close();

类似地,反向解码。

您尝试过吗?您也可以使用Java的序列化来实现这一目的,尽管生成的文件不是XML(即,如果您只需要访问Java应用程序中的数据,就可以使用它)。这个问题太广泛了。什么的
ArrayList
?什么XML模式?@Njol I将在Java应用程序中访问此文件时,我需要将虚拟银行帐户用户存储到一个文件中,然后当他们有匹配的pin码和用户名时,能够将他们重新读回程序中…@Njol I当然不必使用XML,在我之前的帖子中有人告诉我这是更好的方式。。。