maven项目具有特定的项目结构,所以自定义的一些文件需要通过特殊的访问方式才能在代码中访问,而不能通过简单的绝对路径或相对路径就能访问。

maven打包项目的时候,其实改变了原有编码时的结构,如图:

 编码时的项目结构:

如何手动获取maven项目中resource目录下的文件(包括二级目录下的文件)

 maven打包时的项目结构: 

如何手动获取maven项目中resource目录下的文件(包括二级目录下的文件)

其实maven项目在运行的时候,其实执行的是target目录下的class代码。但是编码的时候如果按照原有的文件路径访问本项目中的文件,那么会找不到文件。

所以需要换一个方式

以该项目结构为例

如何手动获取maven项目中resource目录下的文件(包括二级目录下的文件)

  • 访问1号文件
    • 方式一
    • ClassLoader classLoader = DocOperator.class.getClassLoader();
       URL resource = classLoader.getResource("00000.docx");
       String path = resource.getPath();
       System.out.println(path);
    • 方式二
    • URL resource1 = DocOperator.class.getResource("/00000.docx");
      System.out.println(resource1.getPath());
      String path = resource1.getPath();
            
  •  访问2号文件

  访问2号文件时,需要修改pom文件,因为maven会忽略「case」这个文件夹,也就是target目录中会没有「case」目录,自然在Java代码中也就访问不到了。

  所以需要在pom文件中新增一个配置

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <!--包含文件夹以及子文件夹下所有资源-->
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
    </build>

  新增之后

  如何手动获取maven项目中resource目录下的文件(包括二级目录下的文件)

  然后就可以按照访问文件1的方式访问文件2,只需要将路径改成「case/00000.docx」。

注意事项:

  •  路径前面加「/」和不加的区别
URL resource1 = DocOperator.class.getResource("/");
URL resource2 = DocOperator.class.getResource("");
System.out.println("带斜杠: " + resource1.getPath());
System.out.println("不带斜杠: " + resource2.getPath());

如何手动获取maven项目中resource目录下的文件(包括二级目录下的文件)

带有「/」访问的是根目录,不带「/」访问的是所有类的公共包名。

相关文章:

  • 2021-11-26
  • 2022-12-23
  • 2021-08-07
  • 2021-07-05
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2021-07-24
猜你喜欢
  • 2022-01-30
  • 2022-01-07
  • 2022-12-23
  • 2021-11-06
  • 2022-12-23
  • 2022-02-28
  • 2021-09-18
相关资源
相似解决方案