iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >解读classpath读取resources目录下的文件
  • 120
分享到

解读classpath读取resources目录下的文件

Python 官方文档:入门教程 => 点击学习

摘要

目录classpath读取resources目录下文件1、class.getResource()2、getClassLoader().getResource()4、批量读取5、如果配

classpath读取resources目录下文件

最近在SpringBoot+Maven项目中去读取资源文件的时候,报了找不到文件的错误。

由此展开了对maven项目编译前和编译后的目录结构的了解,以及对java的classpath的理解。

首先:

由Maven构建的WEB工程,java代码放在src/main/java路径下,资源(配置文件等)放在src/main/resources路径下,当构建jar包 或 war包时,JVM虚拟机会自动编译java文件为class文件存放在 target/classes目录下,resource资源下的文件会原封不动的拷贝一份到 target/classes 目录下:而我们一般取的classpath就是target/classes目录

你可以通过这种方式打印你的calsspath

A.class.getClassLoader().getResource("").getPath();

这里又引出一个话题,我们可以根据两种不同的方式去获取Resources下的文件

1、class.getResource()

import org.junit.jupiter.api.Test;
 
public class ResourceTestDemo {
 
    @Test
    void getResourceTest(){
        System.out.println(ResourceTestDemo.class.getResource(""));
        System.out.println(ResourceTestDemo.class.getResource("/"));
       }

打印结果:

1、file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/3.txt
2、file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/test/2.txt

结果分析:

  • 1、getResource("")不带"/“时候是从当前类所在包路径去获取资源
  • 2、getResource("/")带”/"时候是从classpath的根路径获取

2、getClassLoader().getResource()

@Test
 void getClassLoaderResourceTest(){
     System.out.println(ResourceTestDemo.class.getClassLoader().getResource(""));
     System.out.println(ResourceTestDemo.class.getClassLoader().getResource("/"));
 }

打印结果:

file:/Users/qinzhen/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/test-classes/
null

  • class.getResource()不带"/"时候是从当前类所在包路径去获取资源
  • class.getResource()带"/"时候是从classpath的根路径获取
  • class.getResource()本质上也是调用了getClassLoader,只是封装了一层方便了我们使用而已
  • getClassLoader().getResource("")不带"/"时候是从classpath的根路径获取
  • getClassLoader().getResource("/")路径中无法带有"/"
  • getResourceAsStream() 方法仅仅是获取对应路径文件的输入流,在路径的用法上与getResource()一qu

4、批量读取

如果想要批量读区resource下的文件呢?

Resource[] resources = ResourceTestDemo.class.getClassLoader().getResources("validator-config/*.xml");
for (int i = 0; i < resources.length; i++) {
    InputStream inputStream = resources[i].getInputStream();
    String xmlContent = ioUtils.toString(inputStream, "UTF-8");
    System.out.println("content" + i + "=" + xmlContent);
}
 

5、如果配置文件中要引用这个文件的路径呢?

用classpath:xxx.xml 就可以了(xxx.xml放在resources目录下)。注意是springboot的项目

如果还是取不到,看看你的maven工程的pom文件是否做了过滤文件,比如.keystore文件

 <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>*.keystore</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>*.keystore</include>
            </includes>
        </resource>
    </resources>
</build>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 解读classpath读取resources目录下的文件

本文链接: https://www.lsjlt.com/news/177551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作