Java中的Properties类是一个重要的工具类,主要用于处理配置文件,它直接继承自Hashtable<Object,Object>,因此具备Hashtable的所有集合操作特性,同时也针对配置文件场景做了额外的方法适配。在日常开发中,我们经常需要读取properties文件中的配置项,之后对存储的键值对进行遍历处理,掌握其遍历方式是开发中的必备技能。

Properties类的基本特性
Properties类是Java标准库java.util包下的类,设计初衷是为了方便处理键值对形式的配置文件,默认的键值都是字符串类型,不过因为继承自Hashtable,所以理论上也可以存储其他类型的对象,只是官方建议仅使用字符串类型的键值来保证兼容性。
它的常用构造方法有两个:
- 无参构造
Properties():创建一个空的Properties集合 Properties(Properties defaults):创建一个包含默认值的Properties集合
遍历Properties集合的常用方式
1. 使用stringPropertyNames()方法遍历
这是官方推荐的方式,该方法会返回所有键的集合,且保证键和值都是字符串类型,避免了类型转换的问题。
import java.util.Properties;
public class PropertiesTraverseDemo {
public static void main(String[] args) {
// 创建Properties实例
Properties props = new Properties();
// 添加测试配置项
props.setProperty("db.url", "jdbc:mysql://127.0.0.1:3306/test");
props.setProperty("db.username", "root");
props.setProperty("db.password", "123456");
// 使用stringPropertyNames()获取所有键,遍历输出
for (String key : props.stringPropertyNames()) {
String value = props.getProperty(key);
System.out.println("key: " + key + ", value: " + value);
}
}
}
2. 使用keySet()方法遍历
因为Properties继承自Hashtable,所以可以直接使用Hashtable的keySet()方法获取所有键的集合,不过需要注意返回的键是Object类型,需要手动转换为String类型。
import java.util.Properties;
import java.util.Set;
public class PropertiesTraverseDemo2 {
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty("app.name", "demo");
props.setProperty("app.version", "1.0.0");
// 获取所有键的集合
Set<Object> keySet = props.keySet();
for (Object key : keySet) {
// 强制转换为String类型
String keyStr = (String) key;
String value = (String) props.get(key);
System.out.println("key: " + keyStr + ", value: " + value);
}
}
}
3. 使用entrySet()方法遍历
同样基于继承的Hashtable特性,我们可以使用entrySet()方法直接获取键值对实体集合,遍历效率更高,适合配置项较多的场景。
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class PropertiesTraverseDemo3 {
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty("log.level", "info");
props.setProperty("log.path", "/var/log/app");
// 获取所有键值对实体集合
Set<Map.Entry<Object, Object>> entrySet = props.entrySet();
for (Map.Entry<Object, Object> entry : entrySet) {
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println("key: " + key + ", value: " + value);
}
}
}
基于Hashtable特性的其他操作
因为Properties继承自Hashtable,所以除了遍历之外,还可以使用Hashtable提供的其他集合操作方法:
size():获取集合中键值对的数量containsKey(Object key):判断是否存在指定的键containsValue(Object value):判断是否存在指定的值clear():清空集合中的所有键值对
不过需要注意,Properties类本身提供了getProperty(String key)方法获取值,比直接使用Hashtable的get()方法更合适,因为前者会返回null如果键不存在,且专门适配字符串类型的键值。
注意事项
在使用Properties遍历时,需要注意以下几点:
- 如果使用
load()方法从文件加载配置,文件中的键值默认是字符串,但是如果是手动调用put()方法存入非字符串类型的对象,遍历时可能会出现类型转换异常 stringPropertyNames()方法返回的是所有键的快照,遍历过程中修改Properties集合不会影响遍历结果- 如果需要读取默认值,可以使用
getProperty(String key, String defaultValue)方法,当键不存在时返回默认值
下面是一个从文件加载配置并遍历的完整示例:
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesFileDemo {
public static void main(String[] args) {
Properties props = new Properties();
// 从文件加载配置,假设文件在classpath下
try (FileInputStream fis = new FileInputStream("config.properties")) {
props.load(fis);
// 遍历输出所有配置
for (String key : props.stringPropertyNames()) {
System.out.println(key + " = " + props.getProperty(key));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
PropertiesHashtableJava配置集合遍历操作修改时间:2026-06-12 19:42:37