jar包获取资源文件
背景
写的一个spring boot项目打成jar包部署运行下,打成jar包,提示找不到资源文件,如下图:

直接通过idea是可以运行的,但打成jar包后提示找不到资源文件,简单查阅后了解到是因为jar包在读取文件的方式不一致导致的
问题分析
先定位到哪行代码出错,如下:
URI configurationFileURI = this.getClass().getClassLoader().getResource(CONFIGURATION_FILE).toURI();
这里报错,提示getResource为null。
原因如下:
在jar文件中查找资源和在文件系统中查找资源的方式是不一样的
错误的加载方式:
XXX.calss.getResource(path)
XXX.calss.getClassLoader().getResource(path)
正确的加载方式:
XXX.class.getResourceAsStream(path)
XXX.calss.getClassLoader().getResourceAsStream(path)
以流的方式来加载
解决方法
知道了根本原因了,就简单了,将之前getResource这种方式改成getResourceAsStream方法
具体代码如下:
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(CONFIGURATION_FILE);
BufferedReader br = new BufferedReader(new InputStreamReader(resourceAsStream));
String s = "";
List<String> lines = new ArrayList<String>();
while ((s = br.readLine()) != null) {
lines.add(s);
}
// 关闭流
resourceAsStream.close();
br.close();
简单总结
在jar文件中查找资源和在文件系统中查找资源的方式是不一样的
jar包是一个单独的文件而非文件夹,绝对不可能通过"file:/e:/.../ResourceJar.jar/resource/res.txt"这种形式的文件URL来定位资源文件
public InputStream getResourceAsStream(String name); 返回读取指定资源的输入流。这个方法很重要,可以直接获得jar包中文件的内容。
参考资料
http://hxraid.iteye.com/blog/483115
jar包获取资源文件的更多相关文章
- SpringBoot读取war包jar包Resource资源文件解决办法
SpringBoot读取war包jar包Resource资源文件解决办法 场景描述 在开发过程中我们经常会碰到要在代码中获取资源文件的情况,而我在最近在SpringBoot项目中时碰到一个问题,就是在 ...
- Eclipse打jar包,资源文件的读取
最近的工作中需要将java程序打一个jar包,然后在Linux中供调用.程序中需要读取一个配置文件.遇到了三个问题.第一个是依赖的第三方Jar包打成Jar包后找不到:第二个问题是资源文件所在的文件夹打 ...
- maven分开打包jar文件和依赖jar包和资源文件
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- 22.访问jar包下资源路径里的文件
访问jar包下资源路径里的文件 因为打包路径和你构建的代码路径是有差异的,想要查看真实的路径情况,可以查看编译后的classes目录下的文件结构. 想要获取资源文件流: private InputSt ...
- 在swt中获取jar包中的文件 uri is not hierarchical
uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...
- java基础知识3--如何获取资源文件(Java中获取资源文件的url)
java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果. 获取资源文件的方法说明getResourc ...
- jar包中File 文件找不到的异常分析与解决
源链接: http://hxraid.iteye.com/blog/483115#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会 ...
- 从jar中读取资源文件的问题
在项目中遇到了一个问题,在IDE中读取配置文件的程序,打成架包以后,放到服务器上跑,报找不到资源文件的错误. 其中,资源文件的路径如下: 获取配置文件路径和读取的方法如下: private stati ...
- 解决SpringBoot jar包中的文件读取问题
前言 SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档.导出模版等),本地开发时可以正常读取 ,但是,当我们 ...
随机推荐
- Spring 属性注入(二)BeanWrapper 结构
Spring 属性注入(二)BeanWrapper 结构 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) BeanWrap ...
- PLSQL数组
declare type t_varchar_arr is TABLE OF varchar2(60); type t_number_arr is TABLE OF number; v_date t_ ...
- Mac OS X Git安装教程
http://code.google.com/p/git-osx-installer上也提供了一个Git的图形化客户端:OpenInGitGui,可以从这里获得,OpenInGitGui十分小巧,下载 ...
- spring jpetstore研究入门(zz)
spring jpetstore研究入门 分类: java2008-12-21 23:25 561人阅读 评论(2) 收藏 举报 springstrutsibatissearchweb框架servle ...
- 在Tomcat中部署Spring jpetstore
第三篇:在Tomcat中部署Spring jpetstore 博客分类: Java之web SpringTomcatMySQLJDBCMVC Spring samples中的jpetstore,基于 ...
- SparkStreaming 监控文件目录
SparkStream 监控文件目录时,只能监控文件内是否添加新的文件,如果文件名没有改变只是文件内容改变,那么不会检测出有文件进行了添加. )) )).reduceByKey(_ + _) word ...
- Linux下启动停止查看杀死Tomcat进程
文章来自:http://www.linuxidc.com/Linux/2011-06/37180.htm 启动 一般是执行tomcat/bin/startup.sh,sh tomcat/bin/sta ...
- 海港(NOIP2016)
题目链接:海港 这一题怎么样呢?还好吧,也不是太难,没有用到什么特殊的算法,但写法还是很值得学习的.下面讲一下思路: 我们维护三个队列(这里我们采用自己手写的队列,因为这比STL的要快,不过这一题,S ...
- 经典矩阵快速幂之一-----poj3233(矩阵套矩阵
题意:给你一个矩阵A,求S=A+A^2+A^3+...+A^k. 其实这个当时我看着毫无头绪,看了他们给的矩阵发现好!精!妙! 我们这样看 是不是有点思路! 没错!就是右上角,我们以此类推可以得到A+ ...
- react组件父传子
react组件父传子,子组件使用父组件的数据,用props import React, { Component } from 'react'; class App extends Component ...