Java中读写配置文件最常用Properties类,它轻量标准、专用于键值对格式,支持加载/保存、需注意UTF-8编码处理中文,线程不安全,简单项目适用。
Java中读写配置文件最常用的方式是使用Properties类,它专为处理键值对格式的文本配置文件(如app.properties)而设计,轻量、标准、无需额外依赖。
Properties本质是一个继承自Hashtable的类,内部以String为键和值。它支持从输入流加载(如文件、类路径资源),也支持写入到输出流。
load(InputStream)读取.properties文件,推荐用ClassLoader.getResourceAsStream()加载类路径下的文件store(OutputStream, String comments)写入文件,会自动添加时间戳和注释头load(Reader)配合InputStreamReader指定UTF-8从不同位置读取配置时,路径处理很关键:
Properties props = new Properties(); props.load(getClass().getClassLoader().getResourceAsStream("config.properties"));
new FileInputStream("/etc/myapp/config.properties")
new FileInputStream("conf/app.properties"),但不建议,易受运行环境影响读取后用getProperty(String key)获取值,可提供默认值:props.getProperty("timeout", "3000")。
直接用store()写入中文会出现乱码,因为默认编码是ISO-8859-1。正确做法是:
store(Writer, String)重载方法,传入UTF-8编码的OutputStreamWriter
try (Writer w = new OutputStreamWriter(new FileOutputStream("config.properties"), StandardCharsets.UTF_8)) { props.store(w, "Upd
ated config"); }
Properties本身不支持——它只保留键值对;复杂格式建议换用Apache Commons Configuration或YAML/JSON库Properties的方法不是线程安全的(虽然继承自Hashtable,但load/store等不加锁)。多线程频繁读写配置时:
Map.copyOf(props)),运行时只读取@ConfigurationProperties或第三方库如Typesafe Config