读取项目路径下或者resources下的资源文件
这段时间在实习中,jar包读取resources下的资源文件这个问题困扰了我很久。百度查了非常多的方法,但是都会报错。后来没办法,就更换思路,打包时将jar包和资源文件分离。
1. 打包时将资源文件单独打包出来,然后和jar包在同一目录下
(1)pom.xml:使用自定义打包规则package.xml来打包
(2)package.xml(详细请去查怎么写)
<assembly>
<id>full</id>
<!-- 最终打包成一个用于发布的tar.gz文件 -->
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!-- 把项目自己编译出来的jar文件,打包进zip文件的package/目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>package</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
<fileMode>0500</fileMode>
</fileSet>
<!--把resource依赖打包进package/conf目录-->
<fileSet>
<directory>${project.basedir}/src/main/resources</directory>
<outputDirectory>package/conf</outputDirectory>
<includes>
<include>**/*.properties</include>
<include>**/*.yaml</include>
<include>**/log4j2.xml</include>
<include>**/conf/**</include>
<include>**/json/**</include>
<include>**/*.keystore</include>
</includes>
<fileMode>0600</fileMode>
<directoryMode>0500</directoryMode>
</fileSet>
<fileSet>
<directory>${basedir}/</directory>
<outputDirectory>package</outputDirectory>
<includes>
<include>appconfig/config.json</include>
</includes>
<lineEnding>unix</lineEnding>
</fileSet>
</fileSets>
</assembly>
(3)打包之后的XXX.tar.gz:
jar包和资源文件在统一目录下。
(4)Java代码中的读取资源文件的操作:
就是直接new File就行。
(5)解压文件后,执行 java -jar XXX.jar即可。
总结:
以上的做法其实是将jar包和一些资源文件分离了。此外,也可以打包resources下的文件到外面,这样,读取resources下的文件就有了另外一种解法!
2. 百度查的大多数读取resources下的文件
这些方法试了,发现都是在IDEA直接运行(执行tomcat的target目录文件)才可行,使用jar包读取都会出错......(这我是真的没办法了,真不会了。如果有大佬,请在评论区点一点小老弟好吧)
1. Java项目读取resources资源文件路径那点事 - 菜鸟的奋斗之路 - 博客园
2. Jar 包运行时读取 Resources 目录下文件 - java - 后端 |昔日长廊 = 昔日织 = 朝花夕拾—流年似水—朝花夕誓
再后来,大概知道了,jar包读取的话,获取流是可以的,但是获取文件不行。