java中用properties读取.properties文件需将文件放于类路径下,用classloader.getresourceasstream安全加载,配合try-with-resources关闭流,通过getproperty(key,default)防npe,并注意iso-8859-1编码限制。

Java 中用 Properties 类读取 .properties 文件非常直接:先创建 Properties 实例,再通过输入流加载文件,最后用 getProperty() 拿值。关键在于路径处理和异常控制,稍不注意就抛 IOException 或返回 null。
确保 properties 文件在类路径下并正确加载
标准做法是把配置文件(如 config.properties)放在 src/main/resources(Maven 项目)或类路径根目录下。用 ClassLoader.getResourceAsStream() 安全获取流:
- 推荐写法:
InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties"); - 如果返回
null,说明文件没被正确打包或路径写错(注意不加开头斜杠) - 避免用
new FileInputStream("config.properties")——它依赖当前工作目录,部署后极易失败
用 Properties.load() 解析键值对
拿到输入流后,调用 load() 方法解析内容。.properties 文件支持 # 或 ! 开头的注释、反斜杠续行、Unicode 转义(如 \u4f60\u597d),Properties 会自动处理:
Properties props = new Properties(); props.load(is);- 加载后流必须显式关闭(建议 try-with-resources),否则可能泄漏
- 键值中等号前后空格会被保留,但通常建议写成
key=value格式,避免歧义
安全获取属性值并处理默认值
不要直接用 props.getProperty("key"),万一 key 不存在会返回 null,容易引发 NPE。推荐带默认值的重载方法:
String url = props.getProperty("db.url", "jdbc:h2:mem:test");- 若需类型转换(如 int、boolean),自己封装工具方法,例如
Integer.parseInt(props.getProperty("timeout", "30")) - 可用
props.stringPropertyNames()遍历所有键,适合调试或动态配置场景
常见陷阱与建议
实际开发中容易踩坑的地方:
- 文件编码:默认按 ISO-8859-1 解析,中文需保存为 UTF-8 并转义,或改用
Properties.load(Reader)配合InputStreamReader指定 UTF-8 - 重复 key:后出现的覆盖前面的,无警告;建议用配置校验工具提前检查
- 敏感信息:不要把密码明文写在 .properties 里,生产环境应结合加密或外部配置中心
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











