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>
相关文章:
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 lom…...
一键生成唯美动漫图:ComfyUI-tPonynai详细搭建教程
tPonynai 是在 C 站上开源的动漫风格扩散模型,与其他基础大模型一样,只需要输入适当的正面和负面提示词就能够实现动漫图片的生成。截至目前已经有 12.9k 的下载量,生成效果也非常不错。本文将介绍ComfyUI-tPonynai在算家云搭建以及本地部署的…...
C++设计模式(工厂模式)
一、介绍 1.动机 在软件系统中,经常面临着创建对象的工作,这些对象有可能是一系列相互依赖的对象;由于需求的变化,需要创建的对象的具体类型经常变化,同时也可能会有更多系列的对象需要被创建。 如何应对这种变化&a…...
多阶段报童问题动态规划求解,Python 实现
使用 python 编写了多阶段报童模型的动态规划算法。 使用了 python 的装饰器 dataclass ,方便定义类尝试使用并行计算,没有成功,极易出错。动态规划中使用并行计算,还是挺有挑战的;而且并行计算不一定总是比非并行运算…...
【C++进阶篇】像传承家族宝藏一样理解C++继承
文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗࿱…...
Java基础面试题09:Java异常处理完成以后,Exception对象会发生什么变化?
一、Java异常(Exception)基本概念 什么是异常? 简单来说,异常就是程序运行时发生了意外的“错误”或者“不正常现象”,导致程序中断。异常处理的目标是让程序在出现问题时能稳住,不会直接崩溃。 1.1 异常…...
mysql sql语句 between and 是否边界值
在 MySQL 中,使用 BETWEEN 运算符时,边界值是包括在内的。这意味着 BETWEEN A AND B 查询会返回 A 和 B 之间的所有值,包括 A 和 B 自身。 示例 假设有一个表 employees,其中有一个 salary 列,您可以使用以下查询&am…...
Java接收LocalDateTime、LocalDatee参数
文章目录 引言I java服务端的实现1.1 基于注解规范日期格式1.2 json序列化和反序列化全局配置自动处理日期格式化II 知识扩展: 枚举的转换和序列化III 签名注意事项引言 应用场景举例:根据时间段进行分页查询数据 前后端交互日期字符串统一是yyyy-MM-dd HH:mm:ss 或者yyyy-M…...
方差分析、相关分析、回归分析
第一章:方差分析 1.1 方差分析概述 作用: 找出关键影响因素,并进行对比分析,选择最佳组合方案。影响因素: 控制因素(人为可控)和随机因素(人为难控)。控制变量的不同水平: 控制变量的不同取值…...
SQLModel入门
SQLModel 系统性指南 目录 简介 什么是 SQLModel?为什么使用 SQLModel? 安装快速入门 定义模型创建数据库和表 基本 CRUD 操作 创建(Create)读取(Read)更新(Update)删除࿰…...
单片机蓝牙手机 APP
目录 一、引言 二、单片机连接蓝牙手机 APP 的方法 1. 所需工具 2. 具体步骤 三、单片机蓝牙手机 APP 的应用案例 1. STM32 蓝牙遥控小车 2. 手机 APP 控制 stm32 单片机待机与唤醒 3. 智能家居系统 4. 智能记忆汽车按摩座椅 四、单片机蓝牙手机 APP 的功能 1. 多种控…...
PostgreSQL在Linux环境下的常用命令总结
标题 登录PgSQL库表基本操作命令新建库表修改库表修改数据库名称:修改表名称修改表字段信息 删除库表pgsql删除正在使用的数据库 须知: 以下所有命令我都在Linux环境中执行验证过,大家放心食用,其中的实际名称换成自己的实际名称即…...
Unity shaderlab 实现LineSDF
实现效果: 实现代码: Shader "Custom/LineSDF" {Properties{}SubShader{Tags { "RenderType""Opaque" }Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{floa…...
Ubuntu中的apt update 和 apt upgrade
apt update 和 apt upgrade 是 Debian 及其衍生发行版(如 Ubuntu)中常用的两个 APT 包管理命令,它们各自执行不同的任务: apt update: 这个命令用于更新本地软件包列表。当你运行 apt update 时,APT 会从配置的源&…...
Android 中 Swipe、Scroll 和 Fling 的区别
Android 中 Swipe、Scroll 和 Fling 的区别 Swipe(滑动)Scroll(滚动)Fling(甩动)三者之间的区别代码示例 (Fling)总结 在 Android 应用中,Swipe、Scroll 和 Fling 都是用户在触摸屏幕上进行的滑…...
linux基础2
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
如何通过智能生成PPT,让演示文稿更高效、更精彩?
在快节奏的工作和生活中,我们总是追求更高效、更精准的解决方案。而在准备演示文稿时,PPT的制作往往成为许多人头疼的问题。如何让这项工作变得轻松且富有创意?答案或许就在于“AI生成PPT”这一智能工具的广泛应用。我们就来聊聊如何通过这些…...
执法记录仪数据自动备份光盘刻录归档系统
派美雅按需研发的执法记录仪数据自动备份光盘刻录归档系统,为用户提供数据自动上传到刻录服务端、数据上传后自动归类,全自动对刻录端视频文件大小进行实时监测,满盘触发刻录,无需人工干预。告别传统刻录存在的痛点,实…...
启动SpringBoot
前言:大家好我是小帅,今天我们来学习SpringBoot 文章目录 1. 环境准备2. Maven2.1 什么是Maven2.2 创建⼀个Maven项⽬2.3 依赖管理2.3.1 依赖配置2.3.2 依赖传递2.3.4 依赖排除2.3.5 Maven Help插件(plugin) 2.4 Maven 仓库2.6 中…...
重定向操作和不同脚本的互相调用
文章目录 前言重定向操作和不同脚本的互相调用 前言 声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 重定向操作和不同脚本的互相调用 1.不同脚本的互相…...
Unitree GO2 ROS2系统架构深度解析与智能导航实现
Unitree GO2 ROS2系统架构深度解析与智能导航实现 【免费下载链接】go2_ros2_sdk Unofficial ROS2 SDK support for Unitree GO2 AIR/PRO/EDU 项目地址: https://gitcode.com/gh_mirrors/go/go2_ros2_sdk 本文深入探讨Unitree GO2 ROS2 SDK的架构设计与实现原理…...
ESP32-CAM上传图片总失败?排查HTTP POST到巴法云的5个常见坑(WiFi、电源、引脚)
ESP32-CAM图片上传失败排查指南:从硬件到平台的5大关键点 当你满怀期待地将ESP32-CAM对准拍摄对象,却发现图片始终无法上传到巴法云时,那种挫败感我深有体会。这不是一个简单的"复制粘贴代码就能运行"的项目,而是一个需…...
CANN/asc-devkit NodeIoNum API文档
NodeIoNum 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/…...
如何用Zutilo插件提升Zotero文献管理效率:5个实用技巧帮你节省50%时间
如何用Zutilo插件提升Zotero文献管理效率:5个实用技巧帮你节省50%时间 【免费下载链接】Zutilo Zotero plugin providing some additional editing features 项目地址: https://gitcode.com/gh_mirrors/zu/Zutilo 你是否经常在Zotero中花费大量时间处理文献标…...
图神经网络终于能“上生产”了?SITS 2026发布首个支持实时增量训练的AI原生图引擎(附Benchmark对比:吞吐提升6.8×,延迟压至12ms)
更多请点击: https://intelliparadigm.com 第一章:AI原生图计算应用:SITS 2026图神经网络工程化方案 SITS 2026 是面向大规模动态图场景的AI原生图计算框架,深度融合GNN训练、图拓扑实时更新与边缘-云协同推理能力。其核心设计摒…...
终极指南:用FanControl轻松掌控Windows电脑风扇,告别噪音烦恼
终极指南:用FanControl轻松掌控Windows电脑风扇,告别噪音烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/…...
AI视频翻译,正在改变视频出海
过去一年,“短剧/漫剧出海”几乎成为内容行业最热的方向之一。越来越多的团队开始把中文短剧搬到海外市场,包括:TikTokYouTubeReelShortDramaBoxLokShort海外短视频平台而在这个过程中,一个问题开始越来越明显:内容可以…...
手把手教你用Arduino+ELM327读取OBD-II数据(附代码和常见故障码解析)
用Arduino与ELM327打造智能车载数据监控系统 在创客圈子里,车辆数据监控一直是个既实用又有趣的领域。想象一下,用不到200元的硬件成本,就能实时读取发动机转速、油耗数据甚至诊断车辆潜在故障——这正是Arduino与ELM327组合带来的可能性。不…...
到极限了吗?优化算法APP9.0,再加入228个车间调度案例!
我又来更新啦!这次在优化算法APP8.0的基础上再次大更新!加入了4大经典车间调度数据集,共228个实例开箱即用。这个案例的加入非常适合写论文哦!当你以为我黔驴技穷的时候,不好意思,我的表演才刚刚开始~ 哈哈…...
芯片设计中的工程迷信与理性实践:从经验法则到数据驱动
1. 项目概述:从“黑色星期五”迷信到工程设计的理性思考作为一名在电子设计自动化(EDA)和半导体行业摸爬滚打了十几年的工程师,我每天打交道的是精确到纳秒的时序分析、纳米级的物理规则和数以亿计的晶体管布局。在这个世界里&…...
