springboot应用在linux环境获取resource目录下文件报错

embedded/2024/11/15 6:09:16/

一现象:

        springboot应用在window环境中获取resource目录下文件路径正常,linux环境中获取resource目录下文件路径异常。

二代码:

        FileUtil.getAbsolutePath("templates/xx模板.xlsx");  使用的是hutool提供的获取绝对路径的类,

windows获取的路径:

{"msg":"D:/ttttttttttttttt/aerosoft/aerosoft/safe/target/classes/templates/xx.docx","code":200}

linux获取的路径: 

{"msg":"/usr/local/aerosofe/aerosoft-safe/aerosoft-safe.jar!/BOOT-INF/classes!/templates/%e3%80%90%e5%b2%97%e4%bd%8d%e6%96%87%e4%bb%b6%e3%80%91%e5%ae%89%e5%85%a8%e6%89%bf%e8%af%ba%e4%b9%a6%e6%a8%a1%e6%9d%bf.docx","code":200} 显然这不是一个正确的路径

hutool代码如下

java">	/*** 获取绝对路径<br>* 此方法不会判定给定路径是否有效(文件或目录存在)** @param path      相对路径* @param baseClass 相对路径所相对的类* @return 绝对路径*/public static String getAbsolutePath(String path, Class<?> baseClass) {String normalPath;if (path == null) {normalPath = StrUtil.EMPTY;} else {normalPath = normalize(path);if (isAbsolutePath(normalPath)) {// 给定的路径已经是绝对路径了return normalPath;}}// 相对于ClassPath路径final URL url = ResourceUtil.getResource(normalPath, baseClass);if (null != url) {// 对于jar中文件包含file:前缀,需要去掉此类前缀,在此做标准化,since 3.0.8 解决中文或空格路径被编码的问题return FileUtil.normalize(URLUtil.getDecodedPath(url));}// 如果资源不存在,则返回一个拼接的资源绝对路径final String classPath = ClassUtil.getClassPath();if (null == classPath) {// throw new NullPointerException("ClassPath is null !");// 在jar运行模式中,ClassPath有可能获取不到,此时返回原始相对路径(此时获取的文件为相对工作目录)return path;}// 资源不存在的情况下使用标准化路径有问题,使用原始路径拼接后标准化路径return normalize(classPath.concat(Objects.requireNonNull(path)));}

三解决办法:

        当前类名.class.getClassLoader().getResourceAsStream("templates/" + templateName); 通过类加载器获取resource下的文件流。

四原因:
        可以看到这个获取的路径是jar包里面文件的路径,通过FileInputStream是无法读取jar里面的文件的,windows系统正常是因为访问的是文件夹里面的文件


http://www.ppmy.cn/embedded/11787.html

相关文章

使用可穿戴传感器和设备进行压力检测——综述摘录

用于压力检测的设备&#xff1a; Empatica E4腕带&#xff1a;该设备是腕带&#xff0c;是实时生理数据流和可视化传感器。作为医疗级可穿戴设备&#xff0c;它使研究人员能够收集多种生理数据&#xff0c;例如用于HRV分析的BVP&#xff0c;以及反映皮肤特定区域不断波动的电特…

C#:用 BigInteger 计算 斐波那契数列

using System.Numerics; 计算 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;不受长整型位数限制。 编写 fibonacci.cs 如下 // C# program for Fibonacci Series // using Dynamic Programming using System; using System.Numerics;class fibona…

Linux:SSL中加密的数字证书主要内容

数字证书中的内容 # 注意&#xff1a;下列证书信息项目&#xff0c;在面试时常问 Country Name (2 letter code) [AU]:86 # 国家代码 State or Province Name (full name) [Some-State]:shanxi # 省份 Locality Name (eg, city) []:xian # 城市 Organiza…

Abaqus2024 安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到Abaqus2024”。 鼠标右击“此电脑”&#xff0c;选择“属性”。 点击“高级系统设置”。 点击“环境变量”。 点击“新建”。 变量名输入&#xff1a;NOLICENSECHECK 变量值输入&#xff1a;true 然后点击“确定”。 点击“确定”。…

【linux】进程地址被占用

在强制关闭一个udp程序后&#xff0c;重启该程序报错&#xff1a; bind error: Address already in use 查找并关闭占用端口的进程&#xff1a; 首先&#xff0c;确定哪个进程占用了目标端口。在Linux系统中&#xff0c;可以使用以下命令&#xff1a; netstat -tulnp | grep …

MySQL 试图

视图功能在 5.0 以后的版本启用 视图是一张虚表。数据表确实包含了具体数据并且保存到硬盘中的实表。视图使用数据检索语句动态生 成的一张虚表。每一次数据服务重启或者系统重启之后&#xff0c;在数据库服务启动期间&#xff0c;会使用创建视图的语 句重新生成视图中的数据&…

【SpringBoot实战篇】获取用户详细信息

1 明确需求 1需要获取用户详细信息 2 接口文档 1基本信息 2请求参数 无 3 响应数据 响应数据类型&#xff1a;application/json 响应参数说明&#xff1a; 响应数据样例 3 思路分析 1用户名在请求头里获取 4 开发 4.1 控制器usercontroller GetMapping("/userInfo")p…

[Meachines][Easy]Bizness

Main $ nmap -p- 10.10.11.252 --min-rate 1000 $ dirsearch -u https://bizness.htb/ $ whatweb https://bizness.htb/control/login 存在一个未授权的RCE $ git clone https://github.com/jakabakos/Apache-OFBiz-Authentication-Bypass.git $ cd Apache-OFBiz-Authenticat…