杰瑞科技汇

Java读取properties文件,路径如何正确配置?

Java读取Properties文件的方法

在Java中,读取properties文件有几种常见的方法,下面我将介绍最常用的几种方式,并提供完整的代码示例。

Java读取properties文件,路径如何正确配置?-图1
(图片来源网络,侵删)

使用java.util.Properties

这是最基本也是最常用的方法。

基本步骤:

  1. 创建Properties对象
  2. 使用load()方法加载properties文件
  3. 通过getProperty()方法获取属性值

示例代码:

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) {
        // 创建Properties对象
        Properties prop = new Properties();
        try (InputStream input = new FileInputStream("config.properties")) {
            // 加载properties文件
            prop.load(input);
            // 获取属性值
            String dbUrl = prop.getProperty("database.url");
            String dbUser = prop.getProperty("database.user");
            String dbPassword = prop.getProperty("database.password");
            System.out.println("Database URL: " + dbUrl);
            System.out.println("Database User: " + dbUser);
            System.out.println("Database Password: " + dbPassword);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

使用ResourceBundle

ResourceBundle是专门用于本地化资源的类,也可以用于读取properties文件。

示例代码:

import java.util.ResourceBundle;
public class ResourceBundleExample {
    public static void main(String[] args) {
        // 加载resources目录下的config.properties文件
        // 文件名不需要扩展名
        ResourceBundle rb = ResourceBundle.getBundle("config");
        // 获取属性值
        String dbUrl = rb.getString("database.url");
        String dbUser = rb.getString("database.user");
        String dbPassword = rb.getString("database.password");
        System.out.println("Database URL: " + dbUrl);
        System.out.println("Database User: " + dbUser);
        System.out.println("Database Password: " + dbPassword);
    }
}

使用Class.getResourceAsStream()方法

当properties文件在类路径中时,可以使用这种方法。

示例代码:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ClasspathPropertiesReader {
    public static void main(String[] args) {
        Properties prop = new Properties();
        try (InputStream input = ClasspathPropertiesReader.class
                .getClassLoader()
                .getResourceAsStream("config.properties")) {
            if (input == null) {
                System.out.println("Sorry, unable to find config.properties");
                return;
            }
            prop.load(input);
            // 获取属性值
            System.out.println("Database URL: " + prop.getProperty("database.url"));
            System.out.println("Database User: " + prop.getProperty("database.user"));
            System.out.println("Database Password: " + prop.getProperty("database.password"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

使用Spring框架的@Value注解(如果在Spring环境中)

如果你使用的是Spring框架,可以通过@Value注解直接注入properties值。

Java读取properties文件,路径如何正确配置?-图2
(图片来源网络,侵删)

示例代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class SpringPropertiesExample {
    @Value("${database.url}")
    private String dbUrl;
    @Value("${database.user}")
    private String dbUser;
    @Value("${database.password}")
    private String dbPassword;
    public void printProperties() {
        System.out.println("Database URL: " + dbUrl);
        System.out.println("Database User: " + dbUser);
        System.out.println("Database Password: " + dbPassword);
    }
}

注意事项

  1. 文件位置:确保properties文件位于正确的位置(项目根目录、resources目录或指定路径)
  2. 文件编码:确保properties文件使用UTF-8编码,特别是当包含非ASCII字符时
  3. 异常处理:始终处理可能出现的IOException
  4. 资源关闭:使用try-with-resources语句确保InputStream正确关闭
  5. 默认值:可以使用getProperty(key, defaultValue)方法提供默认值

示例properties文件内容(config.properties)

# Database Configuration
database.url=jdbc:mysql://localhost:3306/mydb
database.user=admin
database.password=secret

选择哪种方法取决于你的具体需求和项目环境,对于简单的Java项目,java.util.Properties是最直接的选择;对于Spring应用,@Value注解会更加方便。

Java读取properties文件,路径如何正确配置?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇