java.util.ResourceBundle读取Perporties文件

本文介绍如何使用java.util.ResourceBundle读取Properties文件,实现配置内容的动态修改,提高软件后期维护性。通过新建Properties文件,创建ReadXXXProperties类,并提供静态获取属性的方法,再在其他Java/JSP文件中调用,实现属性的便捷获取。

作用:建立perporties属性文件,修改配置文件内容,不用修改代码,有利于后期维护


使用思想

1  新建一个properties属性文件

2  新建一个ReadXXXProperties.java文件

 a  static  get属性方法

 b  使用构造方法为多个属性赋值

3 在其他java/jsp文件调用这些属性,先实例化对象,使用构造方法赋值,直接使用obj.getXXX  属性()获取

 

 

 

1  perpoties文件目录  




2   新建一个ReadXXXProperties.java文件

### 问题分析 `java.lang.ExceptionInInitializerError` 是由静态初始化块或静态变量初始化过程中抛出的异常导致的。在当前场景中,该异常是由 `java.util.MissingResourceException` 引发的,具体原因是程序尝试通过 `ResourceBundle` 加载指定名称的资源文件(如 `mysql.properties`),但未能找到对应的资源文件[^1]。 以下是关于如何解决此问题的专业解析: --- ### 解决方案 #### 1. 确保资源文件路径正确 `MissingResourceException` 的常见原因之一是资源文件路径配置错误。如果代码中使用了 `ResourceBundle.getBundle("mysql", Locale.getDefault())`,则需要确保以下条件满足: - 资源文件名为 `mysql.properties`。 - 文件位于类路径下的根目录或指定包路径下。例如,如果 `mysql.properties` 文件放在 `src/main/resources` 目录下,则可以通过 `classpath:/mysql.properties` 访问。 #### 2. 检查项目的构建路径 在开发环境中,确保 `mysql.properties` 文件被正确打包到最终的 `.war` 或 `.jar` 文件中。可以打开生成的文件并验证路径是否正确。如果文件未被打包,可能需要检查构建工具(如 Maven 或 Gradle)的配置文件,确保资源文件被包含在打包范围内。 对于 Maven 项目,确保 `pom.xml` 中有如下配置: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </build> ``` #### 3. 验证 `Locale` 设置 `ResourceBundle` 加载资源时会根据 `Locale` 参数选择合适的语言环境。如果指定的语言环境(如 `zh_CN`)不存在对应的资源文件,则会尝试加载默认资源文件(如 `mysql.properties`)。因此,需要确保以下两种情况至少满足其一: - 存在与指定语言环境匹配的资源文件(如 `mysql_zh_CN.properties`)。 - 存在默认资源文件 `mysql.properties`。 #### 4. 使用绝对路径加载资源 如果资源文件无法通过类路径加载,可以尝试使用绝对路径加载。例如: ```java Properties properties = new Properties(); try (InputStream inputStream = new FileInputStream("/absolute/path/to/mysql.properties")) { properties.load(inputStream); } catch (IOException e) { throw new RuntimeException("Failed to load properties file", e); } ``` #### 5. 捕获异常并提供友好提示 为了增强程序的健壮性,可以在捕获 `MissingResourceException` 时记录日志并提供友好的错误提示。例如: ```java try { ResourceBundle bundle = ResourceBundle.getBundle("mysql", Locale.getDefault()); String value = bundle.getString("key"); } catch (MissingResourceException e) { System.err.println("Resource file not found. Please check the configuration."); throw new RuntimeException(e); } ``` --- ### 示例代码 以下是一个完整的示例,展示如何正确加载资源文件并处理潜在异常: ```java import java.io.IOException; import java.util.Locale; import java.util.Properties; import java.util.ResourceBundle; public class ResourceLoader { public static void main(String[] args) { try { // 方法1:通过 ResourceBundle 加载资源 ResourceBundle bundle = ResourceBundle.getBundle("mysql", Locale.getDefault()); System.out.println("Value: " + bundle.getString("key")); // 方法2:通过 Properties 加载资源 Properties properties = new Properties(); try (var inputStream = ResourceLoader.class.getClassLoader().getResourceAsStream("mysql.properties")) { if (inputStream == null) { throw new IOException("Resource file not found in classpath."); } properties.load(inputStream); System.out.println("Value: " + properties.getProperty("key")); } } catch (Exception e) { System.err.println("Failed to load resource: " + e.getMessage()); throw new RuntimeException(e); } } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值