Java 修改 Properties 文件的完整指南
在 Java 中修改 properties 文件有几种常见方法,下面我将详细介绍最常用的几种方式。

(图片来源网络,侵删)
使用 Properties 类和 FileOutputStream
这是最基本的方法,适用于简单的 properties 文件修改。
import java.io.*;
import java.util.Properties;
public class ModifyProperties {
public static void main(String[] args) {
String filePath = "config.properties"; // properties文件路径
Properties props = new Properties();
try {
// 1. 加载现有properties文件
InputStream is = new FileInputStream(filePath);
props.load(is);
// 2. 修改或添加属性
props.setProperty("username", "newUser");
props.setProperty("password", "newPass123");
// 3. 保存修改
OutputStream os = new FileOutputStream(filePath);
props.store(os, "Updated properties file");
System.out.println("Properties文件已更新");
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 Files 和 Path (Java 7+)
对于更现代的 Java 代码,可以使用 NIO API:
import java.io.*;
import java.nio.file.*;
import java.util.Properties;
public class ModifyPropertiesNIO {
public static void main(String[] args) {
Path path = Paths.get("config.properties");
try (InputStream is = Files.newInputStream(path);
OutputStream os = Files.newOutputStream(path)) {
Properties props = new Properties();
props.load(is);
// 修改属性
props.setProperty("timeout", "300");
// 保存修改
props.store(os, "Updated via NIO");
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理中文编码问题
properties 文件包含中文,需要指定编码:
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class ModifyPropertiesWithEncoding {
public static void main(String[] args) {
String filePath = "config.properties";
Properties props = new Properties();
try (Reader reader = new InputStreamReader(new FileInputStream(filePath), StandardCharsets.UTF_8);
Writer writer = new OutputStreamWriter(new FileOutputStream(filePath), StandardCharsets.UTF_8)) {
props.load(reader);
// 修改包含中文的属性
props.setProperty("message", "你好,世界!");
// 保存修改
props.store(writer, "Updated with UTF-8 encoding");
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
- 备份原文件:修改前最好备份原文件,以防修改失败导致数据丢失
- 线程安全:如果多个线程同时修改同一个 properties 文件,需要同步处理
- 文件路径:注意文件路径是相对路径还是绝对路径
- 注释保留:
store()方法会保留原有注释,但会添加新的时间戳注释 - 属性值转义:特殊字符如空格、=、:等会被自动转义
更高级的解决方案
对于复杂场景,可以考虑使用第三方库如 Apache Commons Configuration:

(图片来源网络,侵删)
// 需要添加依赖:commons-configuration
import org.apache.commons.configuration2.Configuration;
import org.apache.commons.configuration2.FileBasedConfiguration;
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
import org.apache.commons.configuration2.ex.ConfigurationException;
public class AdvancedPropertiesExample {
public static void main(String[] args) {
Parameters params = new Parameters();
FileBasedConfigurationBuilder<FileBasedConfiguration> builder =
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
.configure(params.properties().setFileName("config.properties"));
try {
Configuration config = builder.getConfiguration();
// 修改属性
config.setProperty("database.url", "jdbc:mysql://localhost:3306/newdb");
// 保存修改
builder.save();
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
方法可以根据你的具体需求和环境选择使用,对于简单的修改,方法一和方法二就足够了;对于更复杂的需求,可以考虑使用第三方库。

(图片来源网络,侵删)
