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

目录
  • 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>

总结

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

(0)

相关推荐

  • SpringBoot读取Resource下文件的4种方法

    SpringBoot读取Resource下文件 最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传:这里待下载模板位置为resource/excelTemplate/test.xlsx,尝试了四种读取方式,并且测试了四种读取方式分别的windows开发环境下(IDE中)读取和生产环境(linux下jar包运行读取). 第一种: ClassPathResource classPathResource = new ClassPathResource("e

  • Java实现读取resources目录下的文件路径的九种方式

    目录 前情提要 方式一 方式二 方式三 方式四(重要) 方式五(重要) 方式六(重要) 方式七 方式八 方式九 前情提要 本文中提供了九种方式获取resources目录下文件的方式.其中打印文件的方法如下:     /**      * 根据文件路径读取文件内容      *      * @param fileInPath      * @throws IOException      */     public static void getFileContent(Object fileIn

  • Spring Boot读取resources目录文件方法详解

    这篇文章主要介绍了Spring Boot读取resources目录文件方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在Java编码过程中,我们常常希望读取项目内的配置文件,按照Maven的习惯,这些文件一般放在项目的src/main/resources下,因此,合同协议PDF模板.Excel格式的统计报表等模板的存放位置是resources/template/test.pdf,下面提供两种读取方式,它们分别在windows和Linux

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

    目录 classpath读取resources目录下文件 1.class.getResource() 2.getClassLoader().getResource() 4.批量读取 5.如果配置文件中要引用这个文件的路径呢? 总结 classpath读取resources目录下文件 最近在springboot+maven的项目中去读取资源文件的时候,报了找不到文件的错误. 由此展开了对maven项目编译前和编译后的目录结构的了解,以及对java的classpath的理解. 首先: 由Maven构

  • Springboot 项目读取Resources目录下的文件(推荐)

    需求描述:企业开发过程中,经常需要将一些静态文本数据放到Resources目录下,项目启动时或者程序运行中,需要读取这些文件. 读取Resources目录下文件的方法 /** * @Description: 读取resources 目录下的文件 * @Author: ljj * @CreateDate: 2020/11/3 17:20 * @UpdateUser: * @UpdateDate: * @UpdateReakem * @param filePath * @Return: java.l

  • 详解SpringBoot读取resource目录下properties文件的常见方式

    个人理解 在企业开发中,我们经常需要自定义一些全局变量/不可修改变量或者参数来解决大量的变量重复问题,当需要这个全局变量时,只需要从配置文件中读取即可,根据开发中常见的情况,可以分为以下两种情况,分别是: 配置文件为SpringBoot默认的application.properties文件中的自定义参数 加载自定义properties文件中的自定义参数,比如xxx.properties的自定义参数 加载SpringBoot默认的application.properties 准备工作 server

  • Android开发实现读取assets目录下db文件的方法示例

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api,获取天气是通过城市的cityID,项目中准备通过读取weather_city.db数据库来查询cityID,这篇文章写怎么读取assets目录下的db文件,其实方法也挺简单的就是把assets目录下的db文件复制一份到"/data/data/" + packName + "/&

  • Maven项目中读取src/main/resources目录下的配置文件的方法

    在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做? 我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties,因为这是在做kafka项目的时候碰到的问题,在网上查到了不少信息,索性当个搬运工,再根据自己的理解整理一下) 1.在java类中读取 若配置文件不在src/main/resources目录下,可以直接使用 Properties prop = new properties(); prop.load(n

  • java读取resource目录下文件的方法示例

    本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构 ├── main │ ├── java │ │ └── com │ │ └── test │ │ └── core │ │ ├── bean │ │ ├── Test.java │ └── resources │ └── test │ ├── test.txt └── test └── java 我们希望在Test.java中读取test.txt文件中的内容,那么我们可以借助Guava库的Resource

  • Python读取一个目录下所有目录和文件的方法

    本文实例讲述了Python读取一个目录下所有目录和文件的方法.分享给大家供大家参考,具体如下: 这里介绍的是刚学python时的一个读取目录的列子,给大家分享下: #!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global allFileNum ''' 打印一个目录下的所有文件夹和文件 ''' # 所有文件夹,第一个字段是次目录的级别 dirList = [

  • PHP读取目录下所有文件的代码

    读取目录下所有文件的代码,可以不管文件名 复制代码 代码如下: <?php   $dir = "file"; // Open a known directory, and proceed to read its contents   if (is_dir($dir)) {      if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) {          if ($file!=".&qu

随机推荐