当前位置:首页 > 后端开发 > 正文

Java 如何读取配置文件?

在Java中获取配置文件主要通过以下方式:,1. 使用Properties类加载properties文件。,2. 通过ClassLoader的getResourceAsStream读取资源文件。,3. 利用ResourceBundle处理国际化配置文件。,4. Spring框架中可用@PropertySource或Environment接口。,5. 对于XML配置,常用SAX/DOM解析器处理。

基础方法:Properties类(.properties文件)

适用场景:键值对配置(数据库连接、路径设置等)

import java.io.InputStream; import java.util.Properties; public class PropertiesDemo { public static void main(String[] args) { Properties prop = new Properties(); try (InputStream input = PropertiesDemo.class .getClassLoader() .getResourceAsStream("config.properties")) { if (input == null) { System.err.println("配置文件未找到!"); return; } prop.load(input); // 加载配置文件 System.out.println("数据库URL: " + prop.getProperty("db.url")); System.out.println("用户名: " + prop.getProperty("db.user")); } catch (Exception e) { e.printStackTrace(); } } }

配置文件示例 (src/main/resources/config.properties):

# 数据库配置 db.url = jdbc:mysql://localhost:3306/mydb db.user = root db.password = 123456


国际化支持:ResourceBundle类

适用场景:多语言资源配置

import java.util.Locale; import java.util.ResourceBundle; public class I18nDemo { public static void main(String[] args) { // 加载中文资源(文件名为messages_zh_CN.properties) ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.SIMPLIFIED_CHINESE); System.out.println("欢迎语: " + bundle.getString("welcome.message")); } }

文件结构

resources/ ├── messages_en_US.properties └── messages_zh_CN.properties


XML配置:DOM解析器

适用场景:复杂层级配置

Java 如何读取配置文件? 第1张

XML文件示例 (app-config.xml):

<config> <server> <host>api.example.com</host> <port>8080</port> </server> </config>


现代方案:Java NIO文件API

适用场景:非标准路径文件读取

import java.nio.file.Files; import java.nio.file.Paths; public class NioFileReader { public static void main(String[] args) throws Exception { String content = new String( Files.readAllBytes(Paths.get("/etc/myapp/custom.conf")) ); System.out.println("配置内容: n" + content); } }


企业级方案:Spring Boot配置管理

依赖:spring-boot-starter

YAML配置 (application.yml):

cloud: aws: credentials: access-key: AKIAEXAMPLE secret-key: secret

载入配置

Java 如何读取配置文件? 第2张

第三方库:Apache Commons Configuration

依赖(Maven):

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-configuration2</artifactId> <version>2.8.0</version> </dependency>

示例代码

import org.apache.commons.configuration2.PropertiesConfiguration; import org.apache.commons.configuration2.builder.fluent.Configurations; public class ApacheConfigDemo { public static void main(String[] args) throws Exception { Configurations configs = new Configurations(); PropertiesConfiguration config = configs.properties("config.properties"); System.out.println("超时设置: " + config.getInt("timeout")); } }


最佳实践总结

  1. 路径处理

    • 类路径文件:ClassLoader.getResourceAsStream("file")
    • 绝对路径:Paths.get("/abs/path")
    • 相对路径:new File("conf/app.conf")
  2. 安全建议

    // 禁止加载外部路径防止路径遍历攻破 if (path.contains("..")) throw new SecurityException("非法路径!");
  3. 配置类型选型指南

    | 文件类型 | 适用场景 | 工具推荐 |

    |—————-|————————-|———————|

    | .properties | 简单键值对 | Properties类 |

    | .yaml/.yml | 层级化配置 | Spring Boot |

    | .xml | 复杂结构化数据 | DOM/SAX解析器 |

    | .json | REST服务配置 | GSON/Jackson |

  4. 高并发场景

    • 使用static final缓存配置对象
    • Spring Boot的@ConfigurationProperties实现热加载
    • 常见问题解答

      Q1:配置文件放在jar包外如何读取?

      // 示例:读取jar同目录下的conf.properties String externalPath = System.getProperty("user.dir") + "/conf.properties"; Properties prop = new Properties(); prop.load(new FileInputStream(externalPath));

      Q2:如何实现配置热更新?

      • 方案1:Apache Commons Configuration的ReloadingFileBasedConfiguration
      • 方案2:Spring Cloud Config Server集中化管理


      引用说明:本文代码示例遵循Java标准库规范,第三方库引用自Apache Commons官方文档及Spring Framework参考指南,实践建议基于Oracle官方安全标准和行业生产环境经验总结。

      通过本文介绍的六种核心方法,您可灵活应对不同场景下的配置管理需求,建议根据项目规模选择方案——小型项目用Properties类足够,分布式系统推荐Spring Cloud Config等专业解决方案。

      Java 如何读取配置文件? 第3张

0