当前位置: 首页 > news >正文

Spring框架中的ResourcePatternResolver只能指定jar包内文件,指定容器中文件路径报错:FileNotFoundException

原始代码:

public static <T> T getFromFile(String specifiedFile, String defaultClasspathFile, Class<T> expectedClass) {try {ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource[] resources = resolver.getResources(defaultClasspathFile);Resource resource = resources[0];//  获得文件流,因为在jar文件中,不能直接通过文件资源路径拿到文件,但是可以在jar包中拿到文件流String json = readFileResource(resource);return gson.fromJson(json, expectedClass);} catch (Exception e) {throw new DtalentInitException(String.format("Fail to init instance of class[%s] by file specifiedFile[%s], defaultFile[%s]",expectedClass, specifiedFile, defaultClasspathFile), e);}}
private static String readFileResource(Resource resource) throws IOException {byte[] bytes = new byte[1024];StringBuilder buffer = new StringBuilder("");try {if(resource.exists()) {InputStream stream = resource.getInputStream();for (int n; (n = stream.read(bytes)) != -1; ) {buffer.append(new String(bytes, 0, n));}} else {}return buffer.toString();} catch (IOException e) {log.error("Read resource failed.", e);throw e;}}

调用 getFromFile并传入文件路径defaultClasspathFile读取json文件并转为某类的对象

简化代码:

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource[] resources = resolver.getResources(filePath);Resource resource = resources[0];log.info("文件是否存在{}",resource.exists())

场景:

只有当上述代码中的filepath是打到jar包内的文件路径时可用,比如resource下的static文件夹,则传入static/xxxx.json;此时可以读到文件并正常解析;

但是当指定一个非jar包内而是jar所在容器内路径如/opt/conf/xxxx.json时,调用方法时就会报错:FileNotFoundException....cannot be opened because it does not exist at org.springframework.core.io.Classload...

原因:

在Spring框架中,Resource是用于访问低级资源的接口,例如文件或类路径资源。ResourcePatternResolver是一个规定了如何解析资源模式的接口。PathMatchingResourcePatternResolver是一个能解析类路径下的文件,以及文件系统中的文件的ResourcePatternResolver实现。

当你在使用ResourcePatternResolvergetResources方法时,你可以指定一个类路径的模式,例如classpath*:com/example/**/*.xml,这将匹配所有名为.xml的文件,这些文件是在com.example包或其任何子包中。

然而,你提到的问题是“如何指定容器中的文件路径”。这个问题的答案取决于你对“容器中的文件路径”的具体含义。

  1. 如果你指的是类路径中的资源,那么你可以使用classpath:classpath*:前缀来指定资源的位置。例如,你可以使用classpath:/templates/mytemplate.txt来获取类路径中的文件。

  2. 如果你指的是文件系统中的资源,那么你可以使用file:前缀来指定资源的位置。例如,你可以使用file:/etc/config/myconfig.txt来获取文件系统中的文件。

  3. 如果你指的是Web应用程序的上下文中的资源,那么你可以使用ServletContextResource来获取这些资源。例如,你可以使用servletContext.getResourceAsStream("/WEB-INF/myfile.txt")来获取/WEB-INF/myfile.txt文件。

需要注意的是,如果你试图访问的资源不存在,那么当你试图打开一个InputStream时,你将会得到一个FileNotFoundException

最后,如果你在容器中的文件路径是动态的,或者你不能确保这些文件在所有环境中都存在,那么你可能需要使用一个更灵活的方法来访问这些资源,例如使用Java的FilePath类,或者使用Spring的ResourceLoader接口。

所以:若想指定容器内的文件路径,则需要增加:file 前缀,如:file:/opt/conf/xxx.json

相关文章:

Spring框架中的ResourcePatternResolver只能指定jar包内文件,指定容器中文件路径报错:FileNotFoundException

原始代码&#xff1a; public static <T> T getFromFile(String specifiedFile, String defaultClasspathFile, Class<T> expectedClass) {try {ResourcePatternResolver resolver new PathMatchingResourcePatternResolver();Resource[] resources resolver.ge…...

pytorch工具——认识pytorch

目录 pytorch的基本元素操作创建一个没有初始化的矩阵创建一个有初始化的矩阵创建一个全0矩阵并可指定数据元素类型为long直接通过数据创建张量通过已有的一个张量创建相同尺寸的新张量利用randn_like方法得到相同尺寸张量&#xff0c;并且采用随机初始化的方法为其赋值采用.si…...

解决Jmeter响应内容显示乱码

一、问题描述 jmeter在执行接口请求后&#xff0c;返回的响应体里面出现乱码现象&#xff0c;尽管在调了对应请求的响应编码也无用&#xff0c;现找到解决办法。 二、解决办法 进入到jmeter的bin目录下&#xff0c;找到jmeter.properties&#xff0c;通过按ctrlF快速定位查找到…...

ChatGPT和搜索引擎哪个更好用

目录 ChatGPT和搜索引擎的概念 ChatGPT和搜索引擎的作用 ChatGPT的作用 搜索引擎的作用 ChatGPT和搜索引擎哪个更好用 总结 ChatGPT和搜索引擎的概念 ChatGPT是一种基于对话的人工智能技术&#xff0c;而搜索引擎则是一种用于在互联网上查找和检索信息的工具。它们各自具…...

Nginx 301 https跳转后出现跨域和混合内容问题 —— 筑梦之路

问题 在浏览器地址栏敲入url访问静态资源目录时&#xff0c;发现默认跳转到了http协议的地址 如上图所示&#xff0c;客户端https请求先到达API网关&#xff0c;然后网关将请求通过http协议转发到静态资源服务器。 调出浏览器发现客户端发送的https请求收到了一个301状态码的响…...

记录--关于前端的音频可视化-Web Audio

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 背景 最近听音乐的时候&#xff0c;看到各种动效&#xff0c;突然好奇这些音频数据是如何获取并展示出来的&#xff0c;于是花了几天功夫去研究相关的内容&#xff0c;这里只是给大家一些代码实例&…...

docker-compose yml配置、常用命令

下载完docker-compose后&#xff0c;如果想使用docker-compose命令开头&#xff0c;需要创建软连接 sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose 1.docker-compose.yml文件编排 一个 docker-compose.yml 文件的顶层元素有&#xff…...

【实战】 七、Hook,路由,与 URL 状态管理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十三)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

【MySQL】_5.MySQL的联合查询

目录 1. 笛卡尔积 2. 内连接 2.1 示例1&#xff1a;查询许仙同学的成绩 2.2 示例2&#xff1a; 查询所有同学的总成绩&#xff0c;及同学的个人信息 2.3 示例3&#xff1a;查询所有同学的科目及各科成绩&#xff0c;及同学的个人信息 3. 外连接 3.1 情况一&#xff1a;两…...

【后端面经】微服务构架 (1-3) | 熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…...

对UITextField输入内容的各种限制-总结

使用代理方法来限制输入框中的字数&#xff0c;输入的符号&#xff0c;输入的数字大小等各种限制 限制输入字数 已经有小数点了&#xff0c;就不能继续输入小数点 不能输入以0为开头的内容 不能输入以.为开头的内容 小数点后只允许输入一位数 只能输入100以下的数值 **不能包括…...

【图论】二分图

二分图&#xff0c;即可以将图中的所有顶点分层两个点集&#xff0c;每个点集内部没有边 判定图为二分图的充要条件&#xff1a;有向连通图不含奇数环 1、染色法 可以解决二分图判断的问题 步骤与基本思路 遍历图中每一个点&#xff0c;若该点未被染色&#xff0c;则遍历该…...

数据结构——(一)绪论

&#x1f449;数据元素整体思维导图 欢迎补充 一、基本概念❤️ 1.1基本术语⭐️ &#xff08;1&#xff09;数据 客观事务属性的数字、字符。 &#xff08;2&#xff09;数据元素 数据元素是数据的基本单位&#xff0c;一个数据元素可由若干数据项组成&#xff0c;数据项是…...

[ 华为云 ] 云计算中Region、VPC、AZ 是什么,他们又是什么关系,应该如何抉择

前几天看到一个问答帖&#xff0c;我回答完了才发现这个帖子居然是去年的也没人回复&#xff0c;其中他问了一些华为云的问题&#xff0c;对于其中的一些概念&#xff0c;这里来总结讲解一下&#xff0c;希望对学习华为云的小伙伴有所帮助。 文章目录 区域&#xff08;Region&a…...

表单验证:输入的字符串以回车分隔并验证是否有

公司项目开发时&#xff0c;有一个需求&#xff0c;需要对输入的字符串按回车分隔并验证是否有重复项&#xff0c;效果如下&#xff1a; 表单代码&#xff1a; <el-form-item label"IP地址条目&#xff1a;" prop"ipAddressEntry"><el-inputtype&…...

智能财务分析-亿发财务报表管理系统,赋能中小企业财务数字化转型

对于许多中小企业来说&#xff0c;企业重要部门往往是财务和业务部门。业务负责创收&#xff0c;财务负责控制成本&#xff0c;降低税收风险。但因管理机制和公司运行制度的原因&#xff0c;中小企业往往面临着业务与财务割裂的问题&#xff0c;财务数据不清晰&#xff0c;无法…...

图为科技T501赋能工业机器人 革新传统工业流程

工业机器人已成为一个国家制造技术与科技水平的重要衡量标准&#xff0c;在2019年&#xff0c;中国工业机器人的组装量与产量均位居了全球首位。 当前&#xff0c;工业机器人被广泛用于电子、物流、化工等多个领域之中&#xff0c;是一种通过电子科技和机械关节制作出来的智能机…...

安全狗深度参与编写的《云原生安全配置基线规范》正式发布!

7月25日&#xff0c;由中国信息通信研究院、中国通信标准化协会主办的2023可信云大会在北京顺利开幕。 作为国内云原生安全领导厂商&#xff0c;安全狗受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c…...

如何在3ds max中创建可用于真人场景的巨型机器人:第 2 部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建主体 步骤 1 打开 3ds Max。选择机器人头部后&#xff0c;二次单击鼠标并选择隐藏未选中。机器人的其他部分 除了头部之外&#xff0c;将被隐藏。 打开 3ds Max 步骤 2 在人脸选择模式下&#x…...

Vue中TodoList案例_编辑

nextTick: MyItem.vue 加一个编辑按钮&#xff0c;input框&#xff1a;blur失去焦点时触发事件handleBlur&#xff0c;ref获取真实dom&#xff1a; <inputtype"text"v-show"todo.isEdit":value"todo.title"blur"handleBlur(todo,$even…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...