Java小白-Properties类

 Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

特点:

1.继承于 Hashtable,是线程安全的键值对存储结构

  • 继承自 HashtableProperties 类继承自 Hashtable,而 Hashtable 是一个古老的线程安全的键值对存储结构。这意味着 Properties 也继承了线程安全的特性。

  • 线程安全:由于继承自 HashtableProperties 的方法(如 putget 等)是同步的,因此在多线程环境中可以直接使用,而无需额外的同步措施。

  • 限制:虽然线程安全是一个优点,但 Hashtable 的同步机制可能会导致性能问题,尤其是在高并发场景下。如果对性能有较高要求,可以考虑使用 ConcurrentHashMap 等替代方案。

2. 可保存到流中或从流中加载

  • 保存到流Properties 类提供了 store(OutputStream out, String comments)store(Writer writer, String comments) 方法,可以将属性集保存到输出流中,通常用于将配置信息写入文件。

  • 从流加载Properties 类提供了 load(InputStream in)load(Reader reader) 方法,可以从输入流中加载属性集,通常用于读取配置文件(如 .properties 文件)。

  • 应用场景:这种特性使得 Properties 类非常适合用于读取和写入配置文件,例如数据库连接信息、应用配置参数等。

3. 只能保存字符串的键值对

  • 键和值都是字符串Properties 类的键和值都必须是字符串类型。如果需要存储其他类型的数据,必须先将其转换为字符串。

  • 类型转换:在实际使用中,如果需要将字符串类型的值转换为其他类型(如 intdouble 等),需要手动进行类型转换。例如:

    String valueStr = properties.getProperty("key");
    int value = Integer.parseInt(valueStr);
  • 限制:这种限制使得 Properties 类在存储复杂数据结构时不够灵活,但非常适合用于简单的配置文件。

补充:Properties 的其他特性

  1. 默认属性Properties 类有一个构造函数 Properties(Properties defaults),可以指定默认属性。如果在加载属性时某些键不存在,会自动使用默认属性中的值。

  2. 常用方法

    • getProperty(String key):获取指定键的值。

    • setProperty(String key, String value):设置键值对。

    • list(PrintStream out):将属性集以易读的格式输出到指定的打印流。

    • stringPropertyNames():返回所有键的集合,方便遍历。

示例代码

以下是一个简单的示例,展示如何使用 Properties 类加载和保存配置文件:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class PropertiesExample {
    public static void main(String[] args) {
        Properties properties = new Properties();

        // 加载配置文件
        try (FileInputStream fis = new FileInputStream("config.properties")) {
            properties.load(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 获取属性值
        String dbUrl = properties.getProperty("db.url");
        String dbUser = properties.getProperty("db.user");
        String dbPassword = properties.getProperty("db.password");

        System.out.println("Database URL: " + dbUrl);
        System.out.println("Database User: " + dbUser);
        System.out.println("Database Password: " + dbPassword);

        // 修改并保存配置文件
        properties.setProperty("db.password", "newPassword");
        try (FileOutputStream fos = new FileOutputStream("config.properties")) {
            properties.store(fos, "Updated properties");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

配置文件 config.properties 示例

properties文件:

db.url=jdbc:mysql://localhost:3306/mydb
db.user=root
db.password=oldPassword

你可能感兴趣的:(java,数据库)