如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?

简介: 如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?

一、说明

在使用若依前后端分离打包部署到服务器上后,可能会出现主包无法找到从包中的文件的问题,这个问题通常是由于资源文件没有正确地打包到 jar 包中导致的。本文将介绍如何解决这个问题,包括如何在 Java 代码中访问 jar 包中的资源文件、如何将资源文件复制到系统临时目录中以及如何获取复制后的文件在系统中的绝对路径。

使用若依前后端分离打包部署到服务器上后,主包是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");
String resourcePath = resourceUrl.getPath();

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

在使用 getResource() 方法时,路径应该是相对于类路径的。因此,如果 ruoyi-remote-3.8.5.jar 文件在类路径下,则可以直接使用 burn/burnhex/hex2bin.exe 路径。如果该文件不在类路径下,则您需要使用绝对路径来加载该资源。例如,如果您的 ruoyi-remote-3.8.5.jar 文件在 /opt/ruoyi/lib 目录下,则可以使用以下路径:

URL resourceUrl = classLoader.getResource("/opt/ruoyi/lib/ruoyi-remote-3.8.5.jar!/burn/burnhex/hex2bin.exe");

方法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();

这将把 burn/burnhex/hex2bin.exe 文件从 jar 包中提取到系统临时文件夹中的 hex2bin.exe 文件中。然后,您可以使用 file 对象来访问该文件。

这段代码的作用是将项目中的 hex2bin.exe 文件复制到系统临时目录中,以便后续的操作可以使用该文件。具体来说,这段代码做了以下几件事情:

  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 文件在系统中的绝对路径


目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
498 0
存储 jenkins 持续交付
836 2
|
9月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
765 0
|
6月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
6月前
|
弹性计算 运维 安全
阿里云轻量应用服务器38元1年和云服务器99元1年怎么选?二者性能区别及选择参考
在阿里云当下的活动中,38元/年的轻量应用服务器与99元/年的云服务器ECS成为众多新用户的关注焦点。但是有部分用户并不是很清楚二者之间的区别,因此就不知道应该如何选择。接下来,笔者将为您详细剖析ECS云服务器与轻量应用服务器的差异,以供您参考和选择。
643 4
阿里云轻量应用服务器38元1年和云服务器99元1年怎么选?二者性能区别及选择参考
|
6月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。
|
6月前
|
存储 弹性计算 监控
阿里云渠道商:如何挑选阿里云服务器配置?
本文详解通用型、计算型、内存型等实例适用场景,结合性能评估与成本优化策略,助力用户按需选择。以日均1万访问企业网站为例,2核4G+3M带宽月费约200元,性价比高。合理配置更省钱。
|
6月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
441 2
下一篇
开通oss服务