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

如何在Spring Boot中读取JAR包内resources目录下文件

精心整理了最新的面试资料和简历模板,有需要的可以自行获取

点击前往百度网盘获取
点击前往夸克网盘获取

以下是如何在Spring Boot中读取JAR包内resources目录下文件的教程,分为多种方法及详细说明:


方法1:使用 ClassPathResource (Spring框架推荐)

适用于Spring环境,能自动处理类路径资源。

import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;public String readFileWithClassPathResource() throws IOException {// 指定文件路径(相对于src/main/resources)ClassPathResource resource = new ClassPathResource("files/example.txt");try (InputStream inputStream = resource.getInputStream()) {// 将文件内容转为字符串(需Apache Commons IO依赖)return IOUtils.toString(inputStream, StandardCharsets.UTF_8);}
}
注意事项:
  • 路径无需以/开头(如"files/example.txt")。
  • 文件应放在src/main/resources/files/example.txt

方法2:使用 ClassLoader.getResourceAsStream() (Java原生方法)

无需依赖Spring,适用于纯Java环境。

public String readFileWithClassLoader() throws IOException {// 获取ClassLoaderClassLoader classLoader = getClass().getClassLoader();// 指定文件路径(路径以"/"开头表示从resources根目录开始)try (InputStream inputStream = classLoader.getResourceAsStream("files/example.txt")) {if (inputStream == null) {throw new FileNotFoundException("文件未找到");}return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);}
}
注意事项:
  • 路径是否以/开头会影响查找位置:
    • classLoader.getResourceAsStream("files/example.txt"):从类路径根目录开始。
    • getClass().getResourceAsStream("/files/example.txt"):同上。
    • getClass().getResourceAsStream("files/example.txt"):从当前类所在包目录开始。

方法3:使用 FilesPaths (Java 7+ NIO)

适用于需要Path对象操作的场景,但需注意JAR内文件的限制。

import java.nio.file.Files;
import java.nio.file.Paths;public String readFileWithNIO() throws IOException {// 通过ClassLoader获取文件URLjava.net.URL url = getClass().getClassLoader().getResource("files/example.txt");if (url == null) {throw new FileNotFoundException("文件未找到");}// 转换为URI后读取return Files.readString(Paths.get(url.toURI()));
}
注意事项:
  • 直接使用Paths.get("src/main/resources/...")在JAR中会失败,必须通过URL获取路径。

常见问题排查

  1. 文件路径错误

    • 检查文件是否在src/main/resources的正确子目录中。
    • 使用IDE的“Build”或“Maven/Gradle编译”后查看target/classesbuild/resources确认文件是否被正确打包。
  2. JAR中无法读取

    • 使用jar tf your-app.jar命令检查文件是否存在于JAR内。
    • 确保使用getResourceAsStreamClassPathResource,而非FileInputStream
  3. 空指针异常

    • 检查getResourceAsStream()返回的InputStream是否为null,并在代码中处理。

文件位置示例

src/main/resources
├── application.properties
└── files└── example.txt  # 读取路径为 "files/example.txt"

总结

  • 推荐方法:优先使用ClassPathResource(Spring项目)或ClassLoader.getResourceAsStream()(纯Java)。
  • 避免使用new File("path")FileInputStream,这些在JAR中无法工作。
  • 测试验证:在打包后通过java -jar your-app.jar运行并测试文件读取功能。

通过上述方法,你可以安全地读取JAR包内resources目录下的文件内容。

http://www.lryc.cn/news/547313.html

相关文章:

  • 《张一鸣,创业心路与算法思维》
  • SSE 和 WebSocket 的对比
  • es如何进行refresh?
  • Kubespray部署企业级高可用K8S指南
  • 【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】
  • 优选算法的智慧之光:滑动窗口专题(二)
  • Kylin麒麟操作系统服务部署 | NFS服务部署
  • 7.1.2 计算机网络的分类
  • Spring Cloud Alibaba 实战:轻松实现 Nacos 服务发现与动态配置管理
  • 【数据结构】LRUCache|并查集
  • 智能合约中权限管理不当
  • MariaDB Galera 原理及用例说明
  • 【RAG 篇】万字长文:向量数据库选型指南 —— Milvus 与 FAISS/Pinecone/Weaviate 等工具深度对比
  • 关于服务器cpu过高的问题排查
  • Gpt翻译完整版
  • 雷池WAF的为什么选择基于Docker
  • 美股回测:历史高频分钟数据的分享下载与策略解析20250305
  • 【文生图】windows 部署stable-diffusion-webui
  • [Python入门学习记录(小甲鱼)]第3章 Python基础知识
  • 某系统webpack接口泄露引发的一系列漏洞
  • 【计算机网络入门】初学计算机网络(十一)重要
  • 决策树(Decision Tree)基础知识
  • Nat Mach Intell | AI分子对接算法评测
  • 【自学笔记】Hadoop基础知识点总览-持续更新
  • 【Linux】使用问题汇总
  • (二 十 二)趣学设计模式 之 备忘录模式!
  • 交叉编译openssl及curl
  • 【每日八股】计算机网络篇(三):IP
  • Gartner:数据安全平台DSP提升数据流转及使用安全
  • 从vue源码解析Vue.set()和this.$set()