Java工程读取resources中资源文件路径问题,jar中的文件无法读取
问题描述
现象
作为一个刚开始学习java的新人,很多东西都是摸着石头过河,踩坑是常有的事。这不,今天我将maven管理的一个spring boot的WebAPP部署到服务器上,运行直接报错!纳尼!!!本地跑得好好的,一到服务器就出问题,关键是日志文件中的日志不全,无法马上定位到问题。好吧,一步一步排除问题吧!
定位
是不是windows与linux的区别?不是,我在windows上跑了一下打包后的代码,也出问题了,打包前没问题,打包后出问题了,包有毒!然后我开放了日志,一步一步调试(蛋疼啊),最终发现配置文件没有加载,路径出了问题。。。
前言
工程文件结构如下所示,目标是读取resources/python/kafka_producer.py文件
1、本地运行读取资源文件
采用getResource进行读取:
URL urlPath = this.getClass().getResource("/python/kafka_producer.py");
String execStr = String.format("python %s", urlPath.getPath().substring(1));
它是在target文件中读取,这时文件是我们熟悉的文件。正常读取,运行。
2、读取jar包中的文件信息
InputStream is=this.getClass().getResourceAsStream("/python/kafka_producer.py");
BufferedReader br1=new BufferedReader(new InputStreamReader(is));
String s1="";
while((s1=br1.readLine())!=null)
System.out.println(s1);
如果你需要运行脚本文件,这时是不能直接通过路径获取的,具体可以看博客点击。你需要重新将流写入文件中,在运行,当然,也可以打war包,不用jar包。如果读取配置文件有一下两种方式:
InputStream in = this.getClass().getResourceAsStream("/properties/basecom.properties");
Properties properties = new Properties();
properties.load(in);
properties.getProperty("property_name")
或者
InputStream xmlFile = this.getClass().getResourceAsStream("/jdbcType.xml");
Document document = xmlReader.read(xmlFile);
Element xmlRoot = document.getRootElement();
Element childElement = xmlRoot.element(dbType);
List<Element> childElements = childElement.elements();
for (Element child : childElements) {
}