如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 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 文件在系统中的绝对路径


目录
相关文章
|
19天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
1月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
|
2月前
|
消息中间件 Java 应用服务中间件
JVM实战—1.Java代码的运行原理
本文介绍了Java代码的运行机制、JVM类加载机制、JVM内存区域及其作用、垃圾回收机制,并汇总了一些常见问题。
JVM实战—1.Java代码的运行原理
|
2月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
110 5
|
2月前
|
域名解析 弹性计算 应用服务中间件
使用域名访问部署在ECS上的网站
本文为您介绍如何为网站配置域名并为域名配置HTTPS证书。
|
10月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
849 2
[JarEditor]可直接修改jar包的IDEA插件
|
10月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
10月前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
10月前
|
安全 Java Docker
|
10月前
|
监控 Ubuntu Java
如何在Ubuntu上运行Jar包?
【7月更文挑战第9天】
543 0
如何在Ubuntu上运行Jar包?