如何手动获取maven项目中resource目录下的文件(包括二级目录下的文件)
maven项目具有特定的项目结构,所以自定义的一些文件需要通过特殊的访问方式才能在代码中访问,而不能通过简单的绝对路径或相对路径就能访问。
maven打包项目的时候,其实改变了原有编码时的结构,如图:
编码时的项目结构:
maven打包时的项目结构:
其实maven项目在运行的时候,其实执行的是target目录下的class代码。但是编码的时候如果按照原有的文件路径访问本项目中的文件,那么会找不到文件。
所以需要换一个方式
以该项目结构为例
- 访问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>
新增之后
然后就可以按照访问文件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());
带有「/」访问的是根目录,不带「/」访问的是所有类的公共包名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!