Idea获取资源配置文件路径

本文详细介绍了在IntelliJ IDEA中加载.properties配置文件的不同方法,包括使用getClass().getResource()与getClassLoader().getResource()的区别,以及如何通过调整项目结构和资源文件标记,实现不同路径下的配置文件读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Idea在类文件当前目录下生产.properties文件:

    右击类文件当前目录--rcnew-->Resource Bundle,即可生成.properties文件,该文件以Key:Value方式配置参数对。

   

    我们进行以下尝试:

/*获取配置文件路径*/
//通过getClass()方法+配置文件名方式获取 》》获取成功
System.out.println(this.getClass().getResource("config.properties").getPath()+'\n');
//通过getClass()方法+绝对路径方式获取  》》获取成功
System.out.println(this.getClass().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClass()方法+相对路径方式获取  》》获取失败,/config.properties表示在根目录下获取该文件
System.out.println(this.getClass().getResource("/config.properties").getPath()+'\n');

//通过getClassLoader()方法+配置文件名方式获取 》》获取失败,getClassLoader()方法是从根目录下获取
System.out.println(this.getClass().getClassLoader().getResource("config.properties").getPath()+'\n');
//通过getClassLoader()方法+绝对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
System.out.println(this.getClass().getClassLoader().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClassLoader()方法+相对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
System.out.println(this.getClass().getClassLoader().getResource("/config.properties").getPath()+'\n');

测试结果:

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

根据尝试结果来看,有以下结论:

1. 一般情况下选择getClass().getResource()方法,要比getClassLoader()方法好用。

2. getClass Loader()方法不支持‘/’方式获取文件。

3. getClass().getResource()方法支持文件名/绝对路径/相对路径方式获取文件,其中:

    1)文件名方式是从.class文件同目录下进行查询获取。

    2)绝对路径是从根目录按照绝对路径进行查询获取。

    3)相对路径方式是在根目录下进行查询获取,下文中另作一些配置后,也可以获取到该配置文件。

4. getClassLoader().getResource()方法支持文件名方式获取文件,不过是在根目录下进行查询获取,同样参见下文另作配置后,也可以获取到该文件。

 

下面我们尝试将Java_Study目录标记Resource,再次进行测试:

通过此图可以看到根目录为D:\Code\In_IDEA\IdeaProjects,src目录为Source标记目录,即源码目录,其作用时表明该目录及其子目录有编译所需要源码,在编译时,其作为编译的一部分进行编译。Tests标记指的时测试源码,作用主要时区分开开发和测试的源码,Resource标记指的是资源配置文件,在编译时将该目录下配置文件拷贝至根目录,即该目录可等同于根目录。

/*获取配置文件路径*/
//通过getClass()方法+配置文件名方式获取 》》获取成功
System.out.println(this.getClass().getResource("config.properties").getPath()+'\n');
//通过getClass()方法+绝对路径方式获取 》》获取成功
System.out.println(this.getClass().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClass()方法+相对路径方式获取  》》获取成功
System.out.println(this.getClass().getResource("/config.properties").getPath()+'\n');

//通过getClassLoader()方法+配置文件名方式获取 》》获取成功
System.out.println(this.getClass().getClassLoader().getResource("config.properties").getPath()+'\n');
//通过getClassLoader()方法+绝对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
//System.out.println(this.getClass().getClassLoader().getResource("/com/company/Java_Study/config.properties").getPath()+'\n');
//通过getClassLoader()方法+相对路径方式获取 》》获取失败,getClassLoader()方法不支持‘/’方式
//System.out.println(this.getClass().getClassLoader().getResource("/config.properties").getPath()+'\n');

测试结果:

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/com/company/Java_Study/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/config.properties

/D:/Code/In_IDEA/IdeaProjects/out/production/IdeaProjects/config.properties

可以看到,将Java_Study目录标记为Resource后,通过相对路径,即在根目录下查询获取config.properties文件成功。

这就跟Resource标记产生的作用有关了,将目录标记为Resource后,编译时会将该目录下配置文件拷贝一份到根目录下,即可将Resource标记目录等同于根目录,所以通过相对路径查询时就可以获取到。

### 配置和使用资源文件 在 IntelliJ IDEA 中,为了使资源文件能够被应用程序正确加载,需要确保这些文件位于项目的合适位置,并且 IDE 能够识别它们作为资源。 对于 Java 项目,在创建新项目之后[^1],可以通过以下方式配置资源文件: #### 设置资源目录 1. 打开 `Project Structure` 对话框(通过菜单 File -> Project Structure... 或者快捷键 Ctrl+Alt+Shift+S) 2. 在左侧列表中选择 Modules 3. 选中对应的模块后点击 Sources 标签页 4. 将想要设为资源路径的文件夹标记为 Resources (蓝色图标),测试资源则应标记为 Test Resources (绿色图标) 这样做的好处在于编译时会自动将指定目录下的所有文件复制到输出路径下,使得运行期可以方便地访问这些资源。 #### 访问资源文件 Java 应用程序通常采用如下方法来读取类路径中的资源: ```java // 获取输入流用于读取资源文件 content.txt 的内容 InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("content.txt"); if(inputStream != null){ try { BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } else { System.err.println("Resource not found!"); } ``` 上述代码片段展示了如何利用 ClassLoader 来获取名为 `content.txt` 文件的内容。需要注意的是,如果资源放置于特定包名之下,则需提供完整的相对路径字符串给 getResourceAsStream 方法调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值