首页新闻找找看学习计划

jar包中的类 如何获取 该 jar包中指定文件的文件路径

0
[已解决问题] 解决于 2017-08-23 20:59

最近在学习一个代码自动生成代码的工具,然后尝试自己写一个依赖mybatis的代码生成工具,其中遇到了一些困难,希望各位大牛能够帮忙解答一些,这里跪谢了!

我现在需要在PathUtils类中 获取template中的两个模板文件,在打包成jar文件之前,可以通过String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();的方式获取到路径,但当打包成jar文件后 这个方法只能获取到C://user/.m2/..../***.jar。而不能获取到内部的路径。百度过几种方法 java.net.URL Url = getClass().getResource("/images/background.png");  无论是从根目录还是用相对路径,这个URL都返回的是null值,所以很郁闷,希望大牛指教,其jar包的文件结构如图所示

草帽boy的主页 草帽boy | 菜鸟二级 | 园豆:206
提问于:2017-08-22 10:48
< >
分享
最佳答案
0

用这个 ClassLoader.getSystemResources("images/background.png")

奖励园豆:5
赵_腾飞 | 菜鸟二级 |园豆:218 | 2017-08-23 17:38
其他回答(2)
0

因为你打成jar包以后,在操作系统看来一个jar包是一个单独文件(操作系统观点single file而已)!

所以你如果想访问jar包中的文件(人的观点),需要使用stream,

所以你需要  使用getResourceAsStream(文件名)

随遇而安jason | 园豆:224 (菜鸟二级) | 2017-08-22 11:07

恩恩 好的 已经解决了 谢谢啦

用getResource  和 getResourceAsStream都可以  主要是前面的用getClass 还是用getClassLoader().

用getClass().getResource("/template/TempEntity.vm”);path 不以’/'开头时默认是从此类所在的包下取资源

当使用 getClassLoader().getResource("template/TempEntity.vm");  ClassLoader默认则是从ClassPath根下获取,path不能以’/'开头,最终是由

我之前 写反了。

支持(0) 反对(0) 草帽boy | 园豆:206 (菜鸟二级) | 2017-08-23 20:58
0

用getResource  和 getResourceAsStream都可以  主要是前面的用getClass 还是用getClassLoader().

用getClass().getResource("/template/TempEntity.vm”);path 不以’/'开头时默认是从此类所在的包下取资源

当使用 getClassLoader().getResource("template/TempEntity.vm");  ClassLoader默认则是从ClassPath根下获取,path不能以’/'开头

草帽boy | 园豆:206 (菜鸟二级) | 2017-08-23 20:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册