Java 类之 java.util.Properties
文章目录
- Java 类之 java.util.Properties
- 一、简介
- 二、主要功能
- 1、存储键值对
- 2、读取文件与属性
- 代码示例
- 运行结果
- 截图
- 3、设置属性并保存文件
- 代码示例
- 结果截图
- 4、遍历属性
- 代码示例
- 运行结果
关联博客:《基于 Java 列举和说明常用的外部化配置的实现方式》
一、简介
java.util.Properties
是 Java 中用于处理属性文件的一个类。
属性文件通常用于存储配置信息,例如应用程序的设置和参数。Properties
类提供了一种方便的方式来管理键值对,其中键和值都是字符串类型。
它本质上是一个 Hashtable
,因为 Hashtable
已经过时了,所以了解即可!
问题:
Hashtable
是不是有点过时了?ChatGPT 回答:是的,
Hashtable
类在Java中被认为有点过时。虽然它是一个实现了基本的哈希表功能的类,但在 Java Collections Framework 中引入了更先进、更强大的替代类,如HashMap
。
HashMap
是Hashtable
的轻量级替代品,它具有相似的功能,但是在性能上更优越。HashMap
允许空键和空值,而Hashtable
不允许。此外,Hashtable
的方法都是同步的,这意味着在多线程环境下,对Hashtable
的操作是线程安全的。然而,这也带来了一些性能开销。如果你在单线程环境下工作,并且不需要线程安全性,那么使用
HashMap
更为推荐。如果需要线程安全性,则可以考虑使用ConcurrentHashMap
或者通过Collections.synchronizedMap
方法包装HashMap
。总体来说,在现代 Java 开发中,更常见的做法是使用
HashMap
或其他相关的集合类,而不是直接使用Hashtable
。
public class Properties extends Hashtable<Object,Object>
二、主要功能
1、存储键值对
Properties
对象可以存储键值对,其中键和值都是字符串。这些键值对通常以文本文件的形式存储,可以由人类读取和编辑。
2、读取文件与属性
代码示例
package com.zibo;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
// 例子:读取属性文件
Properties properties = new Properties();
// config.properties 文件放在根目录下!可能存在中文乱码的问题,这里着重演示读取的过程,不做处理
try (InputStream input = new FileInputStream("config.properties")) {
properties.load(input);
System.out.println(properties.getProperty("name"));
System.out.println(properties.getProperty("age"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果
zibo
27
截图
3、设置属性并保存文件
会创建新文件!如果文件名相同会覆盖!
代码示例
package com.zibo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
Properties properties = new Properties();
try (
OutputStream out = new FileOutputStream("config.properties")
) {
// 修改属性
properties.setProperty("name", "ZIBO");
properties.setProperty("age", "18");
// 保存属性到 config.properties 文件
properties.store(out, "Set 'name' and 'age' value");
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果截图
4、遍历属性
代码示例
package com.zibo;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
// 例子:读取属性文件
Properties properties = new Properties();
// config.properties 文件放在根目录下!可能存在中文乱码的问题,这里着重演示读取的过程,不做处理
try (InputStream input = new FileInputStream("config.properties")) {
properties.load(input);
// 遍历所有属性
properties.forEach((key, value) -> System.out.println(key + " = " + value));
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果
name = ZIBO
age = 18