Java从Properties类中取值

引言

在Java开发中,我们经常会遇到需要从配置文件中读取数据的情况。为了方便管理和修改,我们常常使用.properties文件来存储配置信息。Java中提供了Properties类来读取和写入.properties文件。本文将介绍如何使用Properties类从.properties文件中取值,并提供相应的代码示例。

Properties类简介

Properties类是Java提供的一个工具类,用于操作.properties文件。它继承自Hashtable类,可以存储键值对,其中的键和值都是字符串类型。Properties类提供了一些方法来读取和写入.properties文件,以及获取和设置属性值。

读取.properties文件

要从.properties文件中读取数据,首先需要创建一个Properties对象,并使用其load方法加载文件。下面是一个读取.properties文件的示例代码:

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

public class PropertiesReader {
    public static void main(String[] args) {
        try (InputStream input = new FileInputStream("config.properties")) {
            Properties prop = new Properties();
            prop.load(input);

            String username = prop.getProperty("username");
            String password = prop.getProperty("password");

            System.out.println("Username: " + username);
            System.out.println("Password: " + password);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了一个FileInputStream对象来读取.properties文件。然后创建一个Properties对象,并使用load方法加载文件内容。接下来,我们使用getProperty方法来取得指定键对应的值,并打印出来。

需要注意的是,我们使用了try-with-resources语句来自动关闭InputStream。这样可以确保资源在使用完毕后被正确关闭,无需手动编写关闭代码。

.properties文件格式

.properties文件是以键值对的形式存储配置信息的文本文件。每一行都是一个键值对,格式为key=value。以下是一个示例的.properties文件:

# Database configuration
db.url=jdbc:mysql://localhost:3306/mydb
db.username=root
db.password=123456

# API configuration
api.url=
api.key=abcdefg123456

在上面的示例中,我们定义了一些数据库和API的配置信息。每个键值对都以key=value的形式出现,其中键和值之间使用等号(=)进行分隔。

获取属性值

Properties类提供了多个方法来获取属性值,最常用的是getProperty方法。此方法接收一个键作为参数,返回对应的值。如果找不到对应的键,则返回null。下面是getProperty方法的示例使用:

String value = prop.getProperty("key");

除了getProperty方法,Properties类还提供了getPropertyOrDefault方法,该方法在找不到对应键时返回默认值:

String value = prop.getPropertyOrDefault("key", "default");

如果.properties文件中没有定义对应的键,则getPropertyOrDefault方法会返回默认值。

设置属性值

除了读取.properties文件,Properties类还可以用于设置属性值。我们可以使用setProperty方法来添加或修改属性。下面是一个示例代码:

prop.setProperty("key", "value");

以上代码将在Properties对象中添加一个键值对,键为"key",值为"value"。如果已经存在该键,则会将其值进行更新。

从Properties对象中获取所有键值对

如果我们需要获取.properties文件中的所有键值对,可以使用Properties类的entrySet方法。该方法返回一个Set对象,其中包含了所有的键值对。下面是一个示例代码:

Set<Map.Entry<Object, Object>> entrySet = prop.entrySet();
for (Map.Entry<Object, Object> entry : entrySet) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

在上面的代码中,我们使用entrySet方法获取到所有的键值对,并使用for-each循环遍历输出。

关系图

下面是一个使用mermaid语法绘制的关系图,表示Properties类的结构和相关方法之间的关系:

erDiagram
    Properties ||--|| Hashtable
    Properties ||--|> Map
    Properties "1" -- "1..*" Property
    Properties : +load(InputStream): void
    Properties : +getProperty(String): String
    Properties : +getPropertyOrDefault(String, String): String
    Properties : +setProperty(String, String): Object
    Properties