您的位置:首页 >Java Properties读取配置方法详解
发布于2026-02-22 阅读(0)
扫一扫,手机访问
Properties.load() 默认用 ISO-8859-1 解码导致中文乱码,应改用 load(Reader) 配合 UTF-8 的 InputStreamReader;加载配置须用 getResourceAsStream() 并校验非空;写入需用 store(Writer) 指定 UTF-8;Spring Boot 中优先使用 @ConfigurationProperties 而非手动加载。

Java 的 Properties 类默认用 ISO-8859-1 解码,遇到含中文的 .properties 文件会显示为 \u4f60\u597d 这类 Unicode 转义或直接乱码。这不是文件编码问题,而是 load(InputStream) 方法的固有行为。
new FileInputStream("config.properties") 直接传给 load() —— 它不识别 UTF-8load(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” 功能硬编码路径如 "./conf/app.properties" 在 JAR 包、IDE、容器中行为不一致;getResourceAsStream() 基于类路径查找,是标准实践。
src/main/resources/ 下,运行时自动在 classpath 根目录/ 开头表示从 classpath 根开始,例如 getResourceAsStream("/db.properties")/ 开头则相对于当前类所在包,易出错,避免使用null 表示没找到——务必判空,否则抛 NullPointerExceptionProperties 是内存对象,调用 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");
}Spring Boot 已通过 @ConfigurationProperties 和 @Value 自动绑定 application.properties,手动用 Properties 会绕过 Spring 的类型转换、校验、刷新机制。
Properties,但应封装为 @Component 并监听 ContextRefreshedEvent@PostConstruct 中用 getResourceAsStream() 读取未被 Spring 管理的配置,可能因 classpath 未就绪而返回 nullProperties 接口,可用 Environment.getProperty("key") 替代,它支持占位符、Profile 切换和类型安全StandardCharsets.UTF_8,如果编辑器保存文件时选了 GBK,或者构建工具(如 Maven Resources Plugin)默认按平台编码拷贝资源,最终打包进 JAR 的仍是乱码文件——得检查源文件编码、IDE 设置、构建插件配置三处。 上一篇:百度智慧农场电脑版登录入口
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9