读取resource资源文件

本文介绍了在开发环境和生产环境中如何读取Java资源文件,包括本地读取、IDE读取以及在Linux环境下部署为jar包时的读取方法。强调了在生产环境中应当使用类加载器通过流方式读取文件,以确保能正确读取jar包内的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 开发环境读取

1.1 本地读取资源文件

(不建议使用绝对路径(d:/xxx/xxx.xml)和相对路径(src/java/main/xxx.xml读取)。

相对路径:采用文件(File)方式进行读取:

File file = new File("src/main/resources/xxx/xxx.properties");
InputStream in = new FileInputStream(file);

当在eclipse中运行(不部署到服务器上),可以读取到文件。

1.2 本地ide读取文件

File file = ResourceUtils.getFile("classpath:excleTemplate/test.xlsx");
InputStream inputStream = new FileInputStream(file);

这种方式只有开发环境 时可以读取到,生产环境读取失败。springboot内置tomcat,打包后是一个jar包,无法直接读取jar包中的文件,读取只能通过类加载器读取。

2. 生产环境(linux部署成jar包)

当工程部署到Tomcat中时,按照上边方式,则会出现找不到该文件路径的异常。经搜索资料知道,Java工程打包部署到Tomcat中时,properties的路径变到顶层(classes下):
在这里插入图片描述

并且,此时读取文件需要采用 流(stream) 的方式读取,如下:

第一种:

InputStream in = this.getClass().getResourceAsStream("/xxx/basecom.properties");

其中properties前的斜杠,相对于调用类,共同的顶层路径。

第二种

ClassPathResource classPathResource = new ClassPathResource("xxx/test.xlsx");
InputStream inputStream =classPathResource.getInputStream();

第三种

对于多线程写法,要用下面的线程上下文的方式读取

InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("haha.txt");

这三种都可以读取到文件原来其实殊途同归,直接查看底层代码都是通过类加载器读取文件流,类加载器可以读取jar包中的编译后的class文件,当然也是可以读取jar包中的excle模板了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值