欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析如何使用xstream實(shí)現(xiàn)javaBean與xml互轉(zhuǎn)

 更新時(shí)間:2025年05月04日 08:47:57   作者:xuTao667  
XStream 是一個(gè)用于將 Java 對(duì)象與 XML 之間進(jìn)行轉(zhuǎn)換的庫(kù),它非常簡(jiǎn)單易用,下面將詳細(xì)介紹如何使用 XStream 實(shí)現(xiàn) JavaBean 與 XML 之間的互轉(zhuǎn),需要的可以了解下

XStream 是一個(gè)用于將 Java 對(duì)象與 XML 之間進(jìn)行轉(zhuǎn)換的庫(kù)。它非常簡(jiǎn)單易用,適用于快速開發(fā)和原型設(shè)計(jì)。下面將詳細(xì)介紹如何使用 XStream 實(shí)現(xiàn) JavaBean 與 XML 之間的互轉(zhuǎn),并提供具體的代碼示例。

1. 引入依賴

首先,確保在項(xiàng)目中引入了 XStream 的依賴。如果使用的是 Maven 構(gòu)建工具,可以在項(xiàng)目的 pom.xml 文件中添加如下依賴:

<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.19</version> <!-- 檢查是否有更新版本 -->
</dependency>

2. 定義 JavaBean

假設(shè)有一個(gè)簡(jiǎn)單的 Person 類,包含姓名、年齡和地址信息:

public class Person {
    private String name;
    private int age;
    private Address address;
 
    // Getters and Setters
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
 
    public static class Address {
        private String street;
        private String city;
        private String state;
 
        // Getters and Setters
 
        @Override
        public String toString() {
            return "Address{" +
                    "street='" + street + '\'' +
                    ", city='" + city + '\'' +
                    ", state='" + state + '\'' +
                    '}';
        }
    }
}

3. JavaBean 轉(zhuǎn) XML

使用 XStream 將 Person 對(duì)象轉(zhuǎn)換為 XML 字符串:

import com.thoughtworks.xstream.XStream;
 
public class JavaBeanToXmlExample {
    public static void main(String[] args) {
        // 創(chuàng)建 Person 對(duì)象
        Person.Address address = new Person.Address();
        address.setStreet("123 Main St");
        address.setCity("Anytown");
        address.setState("Anystate");
 
        Person person = new Person();
        person.setName("John Doe");
        person.setAge(30);
        person.setAddress(address);
 
        // 創(chuàng)建 XStream 實(shí)例
        XStream xstream = new XStream();
 
        // 將 JavaBean 轉(zhuǎn)換為 XML
        String xml = xstream.toXML(person);
 
        // 輸出 XML
        System.out.println(xml);
    }
}

4. XML 轉(zhuǎn) JavaBean

使用 XStream 將 XML 字符串轉(zhuǎn)換為 Person 對(duì)象:

import com.thoughtworks.xstream.XStream;
 
public class XmlToJavaBeanExample {
    public static void main(String[] args) {
        // XML 字符串
        String xml = "<person>\n" +
                     "  <name>John Doe</name>\n" +
                     "  <age>30</age>\n" +
                     "  <address>\n" +
                     "    <street>123 Main St</street>\n" +
                     "    <city>Anytown</city>\n" +
                     "    <state>Anystate</state>\n" +
                     "  </address>\n" +
                     "</person>";
 
        // 創(chuàng)建 XStream 實(shí)例
        XStream xstream = new XStream();
 
        // 將 XML 轉(zhuǎn)換為 JavaBean
        Person person = (Person) xstream.fromXML(xml);
 
        // 輸出 JavaBean
        System.out.println(person);
    }
}

5. 自定義標(biāo)簽名稱

默認(rèn)情況下,XStream 會(huì)使用類名和字段名作為 XML 標(biāo)簽名稱。如果想自定義標(biāo)簽名稱,可以使用注解或配置方法。

使用注解

import com.thoughtworks.xstream.annotations.XStreamAlias;
 
@XStreamAlias("person")
public class Person {
    @XStreamAlias("full-name")
    private String name;
    @XStreamAlias("age-in-years")
    private int age;
    @XStreamAlias("address-info")
    private Address address;
 
    // Getters and Setters
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
 
    @XStreamAlias("address")
    public static class Address {
        @XStreamAlias("street-address")
        private String street;
        @XStreamAlias("city-name")
        private String city;
        @XStreamAlias("state-code")
        private String state;
 
        // Getters and Setters
 
        @Override
        public String toString() {
            return "Address{" +
                    "street='" + street + '\'' +
                    ", city='" + city + '\'' +
                    ", state='" + state + '\'' +
                    '}';
        }
    }
}

使用配置方法

import com.thoughtworks.xstream.XStream;
 
public class CustomTagExample {
    public static void main(String[] args) {
        // 創(chuàng)建 Person 對(duì)象
        Person.Address address = new Person.Address();
        address.setStreet("123 Main St");
        address.setCity("Anytown");
        address.setState("Anystate");
 
        Person person = new Person();
        person.setName("John Doe");
        person.setAge(30);
        person.setAddress(address);
 
        // 創(chuàng)建 XStream 實(shí)例
        XStream xstream = new XStream();
 
        // 配置自定義標(biāo)簽名稱
        xstream.alias("person", Person.class);
        xstream.alias("address", Person.Address.class);
        xstream.aliasField("full-name", Person.class, "name");
        xstream.aliasField("age-in-years", Person.class, "age");
        xstream.aliasField("address-info", Person.class, "address");
        xstream.aliasField("street-address", Person.Address.class, "street");
        xstream.aliasField("city-name", Person.Address.class, "city");
        xstream.aliasField("state-code", Person.Address.class, "state");
 
        // 將 JavaBean 轉(zhuǎn)換為 XML
        String xml = xstream.toXML(person);
 
        // 輸出 XML
        System.out.println(xml);
    }
}

知識(shí)延展

使用xstream實(shí)現(xiàn)對(duì)象與XML互相轉(zhuǎn)換

依賴

       <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.18</version>
        </dependency>

實(shí)體類

package com.itheima.util;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

工具類

package com.aircas.util;
 
import com.thoughtworks.xstream.XStream;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class XmlUtils {
 
    private static final XStream xStream = new XStream();
 
    static {
        // 允許反序列化
        xStream.allowTypesByWildcard(new String[] { "**" });
    }
 
    /**
     * 將 Java 對(duì)象轉(zhuǎn)換為 XML,并寫入指定文件。
     *
     * @param <T>     要轉(zhuǎn)換的 Java 對(duì)象類型
     * @param object  要轉(zhuǎn)換的 Java 對(duì)象
     * @param filePath 輸出的 XML 文件路徑
     */
    public static <T> void objectToXml(T object, String filePath) {
        // 為對(duì)象定義 XML 別名
        xStream.alias(object.getClass().getSimpleName(), object.getClass());
 
        StringWriter stringWriter = new StringWriter();
        stringWriter.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 
        // 將對(duì)象轉(zhuǎn)為 XML 字符串
        xStream.toXML(object, stringWriter);
 
        // 獲取文件路徑
        Path path = Paths.get(filePath);
 
        // 使用 NIO 的 BufferedWriter 將 XML 字符串寫入文件
        try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
            writer.write(stringWriter.toString());
            System.out.println("XML 內(nèi)容已成功寫入到文件:" + path.toString());
        } catch (IOException e) {
            System.err.println("寫入 XML 文件時(shí)發(fā)生錯(cuò)誤: " + e.getMessage());
            e.printStackTrace();
        }
    }
 
    /**
     * 從 XML 文件中讀取數(shù)據(jù)并轉(zhuǎn)換為 Java 對(duì)象。
     *
     * @param filePath XML 文件路徑
     * @param clazz    要轉(zhuǎn)換為的 Java 類
     * @param <T>      轉(zhuǎn)換后的對(duì)象類型
     * @return 轉(zhuǎn)換后的 Java 對(duì)象,如果讀取或轉(zhuǎn)換失敗則返回 null
     */
    public static <T> T xmlToObject(String filePath, Class<T> clazz) {
        Path path = Paths.get(filePath);
 
        // 驗(yàn)證文件是否存在
        if (!Files.exists(path)) {
            System.err.println("指定的文件不存在: " + filePath);
            return null;
        }
 
        try {
            String xml = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
            xStream.alias(clazz.getSimpleName(), clazz); // 為目標(biāo)類定義別名
            return (T) xStream.fromXML(xml); // 直接從 XML 字符串轉(zhuǎn)換
        } catch (IOException e) {
            System.err.println("讀取 XML 文件時(shí)發(fā)生錯(cuò)誤: " + e.getMessage());
            e.printStackTrace();
        } catch (ClassCastException e) {
            System.err.println("轉(zhuǎn)換 XML 數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤: " + e.getMessage());
            e.printStackTrace();
        }
 
        return null;
    }
}

測(cè)試

package com.itheima.one;
 
import com.itheima.one.XmlUtils;
import com.itheima.util.Person;
 
public class Main {
    public static void main(String[] args) {
        // 假設(shè)有一個(gè)對(duì)象 person,你需要將其轉(zhuǎn)換為 XML
        Person person = new Person("John", 30);
        String filePath = "D:/Desktop/person.xml";
 
        // 調(diào)用靜態(tài)方法將對(duì)象轉(zhuǎn)換為 XML 并寫入文件
        XmlUtils.objectToXml(person, filePath);
 
        // 從 XML 文件中讀取并轉(zhuǎn)換為對(duì)象
        Person readPerson = XmlUtils.xmlToObject(filePath, Person.class);
        System.out.println(readPerson);
    }
}

輸出結(jié)果:

XML 內(nèi)容已成功寫入到文件:D:\Desktop\person.xml
Person(name=John, age=30)
D:/Desktop/person.xml文件內(nèi)容: 
<?xml version="1.0" encoding="UTF-8"?>
<Person>
  <name>John</name>
  <age>30</age>
</Person>

總結(jié)

JavaBean 轉(zhuǎn) XML:使用 XStream 的 toXML 方法將 Java 對(duì)象轉(zhuǎn)換為 XML 字符串。

XML 轉(zhuǎn) JavaBean:使用 XStream 的 fromXML 方法將 XML 字符串轉(zhuǎn)換為 Java 對(duì)象。

自定義標(biāo)簽名稱:可以使用注解或配置方法來(lái)自定義 XML 標(biāo)簽名稱。

以上就是淺析如何使用xstream實(shí)現(xiàn)javaBean與xml互轉(zhuǎn)的詳細(xì)內(nèi)容,更多關(guān)于javaBean與xml互轉(zhuǎn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于synchronized有趣的同步問題

    關(guān)于synchronized有趣的同步問題

    今天小編就為大家分享一篇關(guān)于關(guān)于synchronized有趣的同步問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 常用json與javabean互轉(zhuǎn)的方法實(shí)現(xiàn)

    常用json與javabean互轉(zhuǎn)的方法實(shí)現(xiàn)

    這篇文章主要介紹了常用json與javabean互轉(zhuǎn)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java 使用memcached以及spring 配置memcached完整實(shí)例代碼

    java 使用memcached以及spring 配置memcached完整實(shí)例代碼

    本篇文章主要介紹了java 使用memcached以及spring 配置memcached完整實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • Java將Object轉(zhuǎn)換為數(shù)組的代碼

    Java將Object轉(zhuǎn)換為數(shù)組的代碼

    這篇文章主要介紹了Java將Object轉(zhuǎn)換為數(shù)組的情況,今天在使用一個(gè)別人寫的工具類,這個(gè)工具類,主要是判空操作,包括集合、數(shù)組、Map等對(duì)象是否為空的操作,需要的朋友可以參考下
    2022-09-09
  • Java實(shí)現(xiàn)多文件壓縮打包的方法

    Java實(shí)現(xiàn)多文件壓縮打包的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)多文件壓縮打包的方法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)zip文件壓縮與解壓縮相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • java三個(gè)環(huán)境變量配置簡(jiǎn)單教程

    java三個(gè)環(huán)境變量配置簡(jiǎn)單教程

    這篇文章主要為大家詳細(xì)介紹了java三個(gè)環(huán)境變量配置簡(jiǎn)單教程,配置path變量、配置classpath變量、最后是配置JAVA_HOME變量,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 深入理解Java運(yùn)行時(shí)數(shù)據(jù)區(qū)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    深入理解Java運(yùn)行時(shí)數(shù)據(jù)區(qū)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java運(yùn)行時(shí)數(shù)據(jù)區(qū)的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-06-06
  • java集合模擬實(shí)現(xiàn)斗地主洗牌和發(fā)牌

    java集合模擬實(shí)現(xiàn)斗地主洗牌和發(fā)牌

    這篇文章主要為大家詳細(xì)介紹了java集合模擬實(shí)現(xiàn)斗地主洗牌和發(fā)牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例

    SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Jmeter如何添加循環(huán)控制器

    Jmeter如何添加循環(huán)控制器

    這篇文章主要介紹了Jmeter如何添加循環(huán)控制器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論