运行jar包出现class path resource[] cannot be resolved to absolute file path because it does not XXX

1、问题描述

        最近我碰到了一个问题,我打了jar包以后无法通过文件路径访问resources目录下的文件。

 

 

2、产生原因

        因为通过package打的jar包本身就是一个压缩文件,压缩以后的话,resources目录下的文件的路径就会发生变化了,而且对于压缩文件除非使用专门的解压缩软件,否则你也打不开这个包啊!因此就会造成路径不对无法访问jar包中编译后resources目录下的文件。

 

3、解决方法

        其实很简单,访问resources目录下的文件你就以流的形式去访问。如果想要新建文件,直接在服务器上的某个目录下新建,不要把路径写在resources目录下!

4、我的代码

        引入common IO用于对文件流的操作

 <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.13.0</version>
        </dependency>
//获取resources目录下的文件
@Value("classpath:/logo.png")
private Resource logoResource;    
@Value("classpath:/STSONG.TTF")
private Resource stsongResource;


public File createPDF() throws java.io.IOException {
        //在服务器根目录上新建一个专门的文件夹
        File temp = new File("\\ITextPDFandEasyExcelUtil");
        String path = "";
        if (!temp.exists()) {
            temp.mkdir();
            path = temp.getPath();
        }
        File logoFile = new File(temp.getPath() + "/logo.png");
        File stsongFile = new File(temp.getPath() + "/STSONG.TTF");
        if (!logoFile.exists()) {
            FileUtils.copyInputStreamToFile(logoResource.getInputStream(), logoFile);
        }
        if (!stsongFile.exists()) {
            FileUtils.copyInputStreamToFile(stsongResource.getInputStream(), stsongFile);
        }
......
}

        其实就是先在服务器上的根目录创建一个文件夹再把resources目录下的文件拷贝一份到该文件夹里。

         注意获取文件流,最好用@Value取文件并赋值给Resource,因为如果用File file=new File(xxx)在打成jar包的时候,是会找不到文件的。jar中操作文件一定要以流的形式操作!

5、总结

        其实这是一个很基本的java常识,java中的jar包是压缩包,打包以后原工程项目中的文件路径会发生变化,不能再用工程绝对路径了,一定要用相对路径!也不能用new File(),一定要用流!如果一定要用new File()的话,建议在jar包外新建一个文件夹用于File操作!

6、参考资料

resources目录下文件加载失败,class path resource [***] cannot be resolved to URL because it does not exist_Be_insighted的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金斗潼关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值