访问Java项目中jar包内资源文件的四种策略

本文介绍了在Java中访问jar包资源文件的四种方法:使用ClassLoader类加载URL、ResourceUtils获取URL、ClassLoader.getResourceAsStream读取文件和提取到临时文件夹。重点讲解了在前后端分离部署时处理资源路径的问题。

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

一、说明

场景:使用若依前后端分离打包部署到服务器上后,主包是ruoyi-admin.jar,如何写路径,才能找到从包下的ruoyi-remote-3.8.5.jar!/burn/burnhex/hex2bin.exe文件?

二、在 Java 代码中访问 jar 包中的资源文件

方法1 使用 ClassLoader 类来加载资源并返回其 URL

ClassLoader classLoader = getClass().getClassLoader();
//相对路径
URL resourceUrl = classLoader.getResource("burn/burnhex/hex2bin.exe");
//绝对路径
//URL resourceUrl = classLoader.getResource("/opt/ruoyi/lib/ruoyi-remote-3.8.5.jar!/burn/burnhex/hex2bin.exe");
String resourcePath = resourceUrl.getPath();

首先获取当前类的 ClassLoader 实例,使用 getResource() 方法加载 burn/burnhex/hex2bin.exe 资源,并返回其 URL。最后可以使用 getPath() 方法获取该资源在文件系统中的路径。

方法2 使用 ResourceUtils.getURL() 方法来获取资源文件的 URL

使用 ResourceUtils.getURL() 方法来获取资源文件的 URL,然后使用 FileUtils.getFile() 方法将其转换为文件对象。这将返回一个 File 对象。

URL url = ResourceUtils.getURL("classpath:burn/burnhex/hex2bin.exe");
File file = FileUtils.getFile(url);

方法3 使用 ClassLoader.getResourceAsStream()方法来加载资源文件

由于该文件位于 jar 包中,不能像操作文件系统中的文件一样直接访问它,需要使用类似于 getResourceAsStream() 的方法来读取 jar 包中的文件。可以使用 ClassLoader 类的 getResourceAsStream() 方法来获取 jar 包中的资源文件。使用以下代码来获取 burn/burnhex/cmd.bin 文件的 InputStream 对象:

InputStream inputStream = getClass().getClassLoader().getResourceAsStream("burn/burnhex/hex2bin.exe");

方法4 提取到系统临时文件夹中

如果需要在应用程序中频繁地访问 jar 包中的资源文件,那么最好将这些文件提取到文件系统中以提高性能。可以使用类似于以下代码的方法将文件提取到文件系统中:

File file = new File(System.getProperty("java.io.tmpdir"), "hex2bin.exe");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("burn/burnhex/hex2bin.exe");
Files.copy(inputStream, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
String exePath = file.getAbsolutePath();
  1. 创建一个 File 对象 file,该对象表示系统临时目录下的 hex2bin.exe 文件。
  2. 从项目的 burn/burnhex 目录中获取 hex2bin.exe 文件的输入流 inputStream
  3. 使用 Files.copy 方法将 inputStream 中的数据复制到 file 对应的文件中。
  4. 如果 file 对应的文件已经存在,则使用 StandardCopyOption.REPLACE_EXISTING 选项来覆盖原有的文件。
  5. 使用 file.getAbsolutePath() 方法获取复制后的 hex2bin.exe 文件在系统中的绝对路径
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yeats_Liao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值