登录
首页 >  文章 >  java教程

JavaProperties配置读取全攻略

时间:2026-01-23 19:57:53 379浏览 收藏

最近发现不少小伙伴都对文章很感兴趣,所以今天继续给大家介绍文章相关的知识,本文《Java Properties读取配置方法详解》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

Properties.load() 默认用 ISO-8859-1 解码导致中文乱码,应改用 load(Reader) 配合 UTF-8 的 InputStreamReader;加载配置须用 getResourceAsStream() 并校验非空;写入需用 store(Writer) 指定 UTF-8;Spring Boot 中优先使用 @ConfigurationProperties 而非手动加载。

Java里Properties类如何读取配置文件_Java配置管理说明

Properties.load() 读取配置文件时中文乱码怎么办

Java 的 Properties 类默认用 ISO-8859-1 解码,遇到含中文的 .properties 文件会显示为 \u4f60\u597d 这类 Unicode 转义或直接乱码。这不是文件编码问题,而是 load(InputStream) 方法的固有行为。

  • 不要用 new FileInputStream("config.properties") 直接传给 load() —— 它不识别 UTF-8
  • 改用 load(Reader) 重载,配合 InputStreamReader 指定编码:
    try (InputStream is = getClass().getResourceAsStream("/config.properties");
         Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) {
        props.load(reader);
    }
  • 如果必须用 load(InputStream)(比如兼容旧逻辑),确保源文件保存为 ISO-8859-1 编码,并手动转义中文:用 native2ascii 工具或 IDE 的 “Convert encoding and escape non-ASCII” 功能

用 ClassLoader.getResourceAsStream() 加载配置比 new FileInputStream() 更可靠

硬编码路径如 "./conf/app.properties" 在 JAR 包、IDE、容器中行为不一致;getResourceAsStream() 基于类路径查找,是标准实践。

  • 配置文件放在 src/main/resources/ 下,运行时自动在 classpath 根目录
  • 路径以 / 开头表示从 classpath 根开始,例如 getResourceAsStream("/db.properties")
  • 路径不以 / 开头则相对于当前类所在包,易出错,避免使用
  • 返回 null 表示没找到——务必判空,否则抛 NullPointerException

Properties.setProperty() 和 setProperty() 不会自动保存到磁盘

Properties 是内存对象,调用 setProperty("key", "value") 只修改 JVM 中的副本,原文件内容不变。

  • 要写回文件,需显式调用 store(OutputStream, String)store(Writer, String)
  • 写入时注意编码:用 store(Writer, ...) 并指定 UTF-8,否则注释和值仍按 ISO-8859-1 输出
  • 示例:
    try (Writer writer = new OutputStreamWriter(
            new FileOutputStream("config.properties"), StandardCharsets.UTF_8)) {
        props.store(writer, "Updated by Java code");
    }
  • 并发修改同一文件时无锁机制,多线程下需自行同步或改用其他配置方案(如 Apache Commons Configuration)

Spring Boot 项目里别直接 new Properties() 读配置

Spring Boot 已通过 @ConfigurationProperties@Value 自动绑定 application.properties,手动用 Properties 会绕过 Spring 的类型转换、校验、刷新机制。

  • 需要动态加载外部配置(如用户自定义规则文件),再用 Properties,但应封装为 @Component 并监听 ContextRefreshedEvent
  • 避免在 @PostConstruct 中用 getResourceAsStream() 读取未被 Spring 管理的配置,可能因 classpath 未就绪而返回 null
  • 若需兼容 Spring 环境又保留 Properties 接口,可用 Environment.getProperty("key") 替代,它支持占位符、Profile 切换和类型安全
真正容易被忽略的是:即使你用了 StandardCharsets.UTF_8,如果编辑器保存文件时选了 GBK,或者构建工具(如 Maven Resources Plugin)默认按平台编码拷贝资源,最终打包进 JAR 的仍是乱码文件——得检查源文件编码、IDE 设置、构建插件配置三处。

好了,本文到此结束,带大家了解了《JavaProperties配置读取全攻略》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>