0

0

Java properties转XML方法 配置文件格式互相转换

畫卷琴夢

畫卷琴夢

发布时间:2026-03-12 09:39:11

|

876人浏览过

|

来源于php中文网

原创

java properties 转 xml 用 jdk 自带 storetoxml() 即可,但需注意:第二个参数为注释(可 null),第三个为编码(必须显式指定 utf-8);xml 转回须用 loadfromxml(),且结构必须为 ...;键值转义、编码差异、顺序丢失、注释不保留等问题导致 round-trip 不一致。

java properties转xml方法 配置文件格式互相转换

Java Properties 转 XML 用 storeToXML() 就够了

不用额外依赖,JDK 自带的 Properties 类就支持直接写成 XML 格式。关键不是“能不能”,而是参数和编码容易出错。

  • storeToXML() 第二个参数是注释(可为 null),第三个参数才是编码;传错顺序会抛 NullPointerException 或生成乱码
  • 必须用 UTF-8 显式指定编码,否则默认用系统平台编码(Windows 上常是 GBK),中文保存后读不出来
  • XML 输出里键值会被转义:key=value&name 中的 & 变成 &,这是标准行为,不是 bug

示例:

Properties props = new Properties();
props.setProperty("db.url", "jdbc:mysql://localhost:3306/test");
props.setProperty("user.name", "张三");
try (FileOutputStream out = new FileOutputStream("config.xml")) {
    props.storeToXML(out, "Generated by Java", "UTF-8");
}

XML 转回 Properties 必须用 loadFromXML(),不能用 load()

load() 只认传统 key=value 文本格式,拿 XML 文件去喂它会报

Invalid Unicode character` 错误,甚至静默失败(只加载前几行)。</p>
<ul>
<li><code>loadFromXML()
对 XML 结构敏感:根节点必须是 <?xml ...?><properties><entry key="...">...</entry></properties>,手写 XML 时漏掉 <properties></properties> 外层就会抛 Invalid properties format

  • 如果 XML 是从非 Java 工具生成的(比如 Python 的 xml.etree),可能用了自定义命名空间或属性,loadFromXML() 一律不认
  • 值里的换行符在 XML 中要写成 才能被正确还原,直接换行会导致解析中断
  • 中文、特殊字符、空格在两种格式里表现不一致

    properties 原生不支持键名含空格或点号以外的符号,而 XML 没这限制;但反过来,XML 里 、<code>> 会被转义,properties 里却原样存——转换不是对等映射。

    立即学习Java免费学习笔记(深入)”;

    • 键名为 my.key.name 没问题,但 my key name 在 properties 中会被当成三个键(空格分隔),XML 却允许
    • 值含 \u4f60\u597d 这种 Unicode 转义,在 properties 文件里能被 load() 识别,但在 XML 里必须写成实际汉字或 你好
    • storeToXML() 会把所有非 ASCII 字符转成数字字符引用(xxx;),即使你指定了 UTF-8;这是 JDK 行为,改不了

    别指望 round-trip 完全一致,尤其涉及注释和顺序

    properties 文件本身无序,Properties 类内部用 Hashtable(Java 8+ 是 HashMap)存,遍历时顺序不确定;XML 转出来顺序是随机的,再读回去更没法保证。

    • 原始 properties 里的注释(#! 开头)在 XML 中彻底丢失,storeToXML() 不保留它们
    • 重复键在 properties 中后出现的覆盖前面的,XML 中若手工写了两个同 key 的 <entry></entry>loadFromXML() 只取最后一个——这点倒是一致
    • 如果项目里真需要保序+保注释,别用 Properties,改用 java.util.prefs.Preferences 或轻量 YAML 库(如 SnakeYAML)

    真正麻烦的从来不是怎么转,而是转完之后发现某处中文变问号、某行配置莫名其妙消失、或者 CI 环境里因为默认编码不同导致本地好使线上炸锅。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    c语言中null和NULL的区别
    c语言中null和NULL的区别

    c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

    254

    2023.09.22

    java中null的用法
    java中null的用法

    在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

    1089

    2024.03.01

    format在python中的用法
    format在python中的用法

    Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    887

    2023.07.31

    python中的format是什么意思
    python中的format是什么意思

    python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    461

    2024.06.27

    pdf怎么转换成xml格式
    pdf怎么转换成xml格式

    将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    1946

    2024.04.01

    xml怎么变成word
    xml怎么变成word

    步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

    2119

    2024.08.01

    xml是什么格式的文件
    xml是什么格式的文件

    xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

    1168

    2024.11.28

    常见的编码方式
    常见的编码方式

    常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

    647

    2023.10.24

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    3

    2026.03.11

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号