解决SpringBoot打成jar运⾏后⽆法读取resources⾥的⽂
件问题
开发⼀个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版⽂件放到 resources 下
在开发环境中通过下⾯⽅法能读取word_replace_tpl.docx⽂件,但是打成jar包在 linux下运⾏后⽆法到⽂件了File file = File(ResourceUtils.CLASSPATH_URL_PREFIX + "static/office_template/xxx.docx");
在开发环境运⾏时,会把资源⽂件编译到项⽬\target\classes\static\office_template xx.docx ⽬录下,但是打包成jar后,Resource下的⽂件是存在于jar这个⽂件⾥⾯,在磁盘上是没有真实路径存在的,它是位于jar内部的⼀个路径。所以通过File或者Class().getResource("")⽅法⽆法正确获取⽂件。
我们⽤压缩软件打开 jar ⽂件,看看该word模版位于jar内部的路径在这⾥插⼊图⽚描述
怎么解决
1.把该模版⽂件放到jar项⽬外,在项⽬中配置该模版⽂件的绝对路径,不太推荐这种⽅式,可能会忘记配置模版
2.通过 ClassPathResource resource = new ClassPathResource(“static/office_template/word_replace_tpl.docx”);⽅式读取⽤第⼆种⽅式读取jar中的⽂件流
ClassPathResource resource = new ClassPathResource("static/office_template/word_replace_tpl.docx");
File sourceFile = File();
InputStream fis = InputStream();
还要在项⽬l中配置resources情况
<build>
<!-- 定义包含这些资源⽂件,能在jar包中获取这些⽂件 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
</resources>
</build>
再次发布项⽬,访问功能,测试后已经在服务器上能读取模版⽂件并⽣成出新⽂件了
补充知识:两个list⾼效取出其中新增和相同的数
spring怎么读取properties两个list循环,尽量避免双层循环以及contains的使⽤
public static void test(){
List<Integer> oldList = new ArrayList<Integer>(){{add(1);add(2);add(4);add(5);}};
List<Integer> newList = new ArrayList<Integer>(){{add(3);add(4);add(5);add(6);}};
Map<Integer,Integer> map = new HashMap<>();
for (Integer i: oldList ) {
map.put(i,0);
}
System.out.print(map);
for (Integer j: newList ) {
//value为1 ,更新的数据
if (ainsKey(j)){
map.put(j,1);
}else {
//value为2 ,新增的数据
map.put(j,2);
}
}
System.out.println(map);
for (Map.Entry<Integer,Integer> entry: Set() ) {
Value().equals(0)){
System.out.println("旧的值:"+Key());
}
Value().equals(1)){
System.out.println("更新的值:"+Key());
}
Value().equals(3)){
System.out.println("新增的值:"+Key());
}
}
System.out.println(map);
}
public static void main(String[] arg){
test();
}
以上这篇解决SpringBoot打成jar运⾏后⽆法读取resources⾥的⽂件问题就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。