springboot 打成jar后读取resources下面的文件

本文介绍了在Spring Boot项目中,如何处理将项目打包成JAR后无法正常读取resources目录下文件的问题。作者发现使用常规方法在JAR中无法获取文件,原因是JAR中资源的URL格式特殊。通过研究和尝试,作者找到了解决方案,包括使用特定的URL格式或配置绝对路径。虽然某些场景下修改方法会涉及大量代码改动,但配置绝对路径提供了一种简化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用idea开发过程中获取resources的路径是使用的这个方法

File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "文件名称.data");

然后就可以获取 file 获取文件进行各种操作

但是当达成jar 后发现此方法不能获取到文件

然后通过解压工具查看达成jar包,发现路径是这样的

(有时间的话可以自己断点看下这个方法获取的路径,这里不进行演示了)

对比日志后发现一样的并没有不同

唯一的不同是classes后面有一个!号 是这样classes!

jar 文件的后面也是这样有一个!

后来百度发现

在 jar 中资源有其专门的 URL 格式为: jar:!/{entry}

网上还有很多别的方式比如:

ClassPathResource cc = new ClassPathResource("文件名称.data");

ClassPathResource 和 ResourceUtils 的区别就是不用加

ResourceUtils.CLASSPATH_URL_PREFIX 也就是 classpath:

最后的解决方式:

使用

 this.getClass().getResourceAsStream

 完整示例

InputStream inputStream = this.getClass().getResourceAsStream("文件名称.data");

但是有的场景可能并不适用,或者以前的jar 或者方法 只支持使用 String path + String name 的这种方式

我的这个就是这样,如果去改方法得改一堆代码,非常尴尬

我最后采用配置绝对路径的方式

在配置文件中设置一个绝对路径地址,数据库中配置也可以

然后就使用这个路径也可以解决这个问题

因为时间问题没办法贴出详细代码,等有时间再补充吧,不知道能不能帮助到大家

在使用Spring Boot时,可能会出现打成JAR运行后无法读取resources里的文件的问题。这是因为在JAR包中,资源文件会被打包到一个压缩文件中,而不是一个文件夹中。 解决这个问题有几种方法: 1. 使用Classloader获取资源 可以使用Java的Classloader获取JAR包中的资源。这种方法可行,但较繁琐。 举个例子: ```java ClassLoader classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream("file.txt"); ``` 这样做可以读取位于JAR包中的file.txt文件。 2. 使用Spring提供的ResourceLoader Spring提供了ResourceLoader来处理此问题。我们可以注入ResourceLoader并使用它读取资源。 举个例子: ```java @Autowired private ResourceLoader resourceLoader; public void readFile() throws IOException { Resource resource = resourceLoader.getResource("classpath:file.txt"); InputStream inputStream = resource.getInputStream(); } ``` 这个方法还可以处理其他类型的资源,例如网络资源等。 3. 使用FileSystemResource 我们可以使用FileSystemResource来读取文件。这种方法需要JAR包解压到文件夹中,然后使用FileSystemResource来读取文件。 ```java Resource resource = new FileSystemResource(file.txt); InputStream inputStream = resource.getInputStream(); ``` 但是这种方法会使JAR包无法单独使用。 总之,以上三种方法都可以解决打成JAR运行后无法读取resources里的文件的问题,我们可以根据实际情况选择其中一种方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值