当前位置: 首页 > news >正文

Java对象与XML互相转换(xstream)

 依赖

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

实体类

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.itheima.one;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 对象转换为 XML,并写入指定文件** @param <T>     要转换的 Java 对象类型* @param object  要转换的 Java 对象* @param filePath 输出的 XML 文件路径*/public static <T> void objectToXml(T object, String filePath) {// 为对象定义 XML 别名xStream.alias(object.getClass().getSimpleName(), object.getClass());StringWriter stringWriter = new StringWriter();stringWriter.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\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 内容已成功写入到文件:" + path.toString());} catch (IOException e) {System.err.println("写入 XML 文件时发生错误: " + e.getMessage());e.printStackTrace();}}/*** 从 XML 文件中读取数据并转换为 Java 对象** @param filePath XML 文件路径* @param clazz    要转换为的 Java 类* @param <T>      转换后的对象类型* @return 转换后的 Java 对象,如果读取或转换失败则返回 null*/public static <T> T xmlToObject(String filePath, Class<T> clazz) {Path path = Paths.get(filePath);// 验证文件是否存在if (!Files.exists(path)) {System.err.println("指定的文件不存在: " + filePath);return null;}try {String xml = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);return (T) xStream.fromXML(xml, clazz);} catch (IOException e) {System.err.println("读取 XML 文件时发生错误: " + e.getMessage());e.printStackTrace();} catch (ClassCastException e) {System.err.println("转换 XML 数据时发生错误: " + e.getMessage());e.printStackTrace();}return null;}
}

测试

package com.itheima.one;import com.itheima.one.XmlUtils;
import com.itheima.util.Person;public class Main {public static void main(String[] args) {// 假设有一个对象 person,你需要将其转换为 XMLPerson person = new Person("John", 30);String filePath = "D:/Desktop/person.xml";// 调用静态方法将对象转换为 XML 并写入文件XmlUtils.objectToXml(person, filePath);// 从 XML 文件中读取并转换为对象Person readPerson = XmlUtils.xmlToObject(filePath, Person.class);System.out.println(readPerson);}
}

输出结果:

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

http://www.lryc.cn/news/493348.html

相关文章:

  • 一键生成唯美动漫图:ComfyUI-tPonynai详细搭建教程
  • C++设计模式(工厂模式)
  • 多阶段报童问题动态规划求解,Python 实现
  • 【C++进阶篇】像传承家族宝藏一样理解C++继承
  • Java基础面试题09:Java异常处理完成以后,Exception对象会发生什么变化?
  • mysql sql语句 between and 是否边界值
  • Java接收LocalDateTime、LocalDatee参数
  • 方差分析、相关分析、回归分析
  • SQLModel入门
  • 单片机蓝牙手机 APP
  • PostgreSQL在Linux环境下的常用命令总结
  • Unity shaderlab 实现LineSDF
  • Ubuntu中的apt update 和 apt upgrade
  • Android 中 Swipe、Scroll 和 Fling 的区别
  • linux基础2
  • 如何通过智能生成PPT,让演示文稿更高效、更精彩?
  • 执法记录仪数据自动备份光盘刻录归档系统
  • 启动SpringBoot
  • 重定向操作和不同脚本的互相调用
  • 51单片机教程(九)- 数码管的动态显示
  • golang支持线程安全和自动过期map
  • 机器学习之RLHF(人类反馈强化学习)
  • 泷羽sec---shell作业
  • 华为海思2025届校招笔试面试经验分享
  • 摆脱复杂配置!使用MusicGPT部署你的私人AI音乐生成环境
  • 嵌入式Linux中的GPIO编程
  • js:函数
  • 低代码平台审批流程设计
  • OpenCV相机标定与3D重建(8)相机标定函数calibrateCamera()的使用
  • Linux信号量的编程