如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 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 文件复制到系统临时目录中,以便后续的操作可以使用该文件。具体来说,这段代码做了以下几件事情:文章来源地址https://www.toymoban.com/news/detail-836786.html

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

到了这里,关于如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ruoyi若依前后端分离项目部署到服务器后,PUT DELETE请求403错误,GET POST请求正常

    后端打包方式war,部署到tomcat8, PUT DELETE请求报403错误,网上有三种说法 第一种是跨域请求问题 第二种是服务器没有放开了PUT DELETE请求,需要前端添加header ruoyi vue 自动生成代码PUT DELETE为http不安全方法,这个怎么解决安全问题 · Issue #I43AX6 · 若依/RuoYi-Vue - Gitee.com 用域名访问

    2024年01月17日
    浏览(51)
  • 【若依后管框架(前后端分离版)】 如何部署若依以及添加自己的功能模块和菜单

    【若依后管框架(前后端分离版)】 如何添加自己的功能模块以及菜单 【文章开始之前,先说一句,若依牛逼!】 1 若依框架简介 RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、角色用户、菜

    2024年02月05日
    浏览(55)
  • Java——Linux使用Docker部署若依前后端分离版【保姆级教程】

    目录 一、项目规划与前置工作 1.1、docker所需镜像 1.2、使用工具  1.3、防火墙与安全组的配置  1.4、域名解析、备案、SSL证书的准备(可选) 二、Docker和镜像安装 2.1、Docker安装 2.1.1、检查环境 2.1.2、搭建gcc环境(gcc是编程语言译器) 2.1.3、安装需要的软件包 2.1.4、装镜像仓

    2024年02月02日
    浏览(67)
  • 若依框架(前后端分离) 之IDEA中Maven后端打包

    Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理,是一个自动化构建工具。maven是Apache的顶级项目,解释为“专家,内行”,它是一个项目管理的工具,maven自身是纯java开发的(

    2024年02月09日
    浏览(54)
  • 若依前后端分离项目docker部署

    1.centos 7 2.docker 3.mysql5.x 8.x 4.redis 5.nginx 前往 Gitee 下载页面(https://gitee.com/y_project/RuoYi-Vue (opens new window))下载解压到工作目录 3.1 后端 1.下载代码到本地后,解压完成,用idea打开项目 2.创建数据库:ry-vue 3.在创建好数据库后,运行以下两个sql文件生成数据表(quartz.sql、ry_202208

    2024年02月05日
    浏览(42)
  • Spring Boot+Vue前后端分离项目如何部署到服务器

    🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 🤖 洛可可白 :个人主页 🔥 个人专栏 :✅前端技术 ✅后端技术 🏠 个人

    2024年04月11日
    浏览(55)
  • 若依前后端分离项目在腾讯云的部署

    本文章使用了腾讯云提供的宝塔系统 在部署项目和配置环境的时候会相对其他方法更容易一些  购买腾讯云服务器 腾讯云11.11云上盛惠_腾讯云11.11优惠活动-腾讯云 (tencent.com)  我购买的是2核4g的服务器 之前听老师建议最好2核4g起步    购买的时候选择默认的宝塔系统就ok了不

    2024年02月06日
    浏览(44)
  • 用docker一键部署前后端分离若依系统

    目录 一、搭建局域网 1.1、介绍前后端项目搭建 1.2、操作 二、安装redis 测试 三、安装Mysql 检查 远程连接  注意:0- 1-工具原因,复制进去记得删除​编辑 工具测试 四、部署后端服务 4.1、创建数据库 4.2、使用Dockerfile自定义镜像 测试 测试 五、前端部署 5.1、nginx部署 分析n

    2024年03月16日
    浏览(42)
  • 【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包

             Nginx 是一款高性能的 Web 服务器和 反向代理服务器 ,也可以充当负载均衡器、HTTP 缓存和安全防护设备。它的特点是内存占用小、稳定性高、并发性强、易于扩展,因此在互联网领域得到了广泛的使用。 总结出以下三点: 负载均衡 :流量分摊 反向代理 :处理外

    2024年02月06日
    浏览(44)
  • 若依RuoYi-Vue项目部署(前后端分离版本)

    RuoYi 是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。 若依是作者给女儿取的名字(寓意:你若不离不弃,我必生死相依) 在线体验 若

    2023年04月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包