为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容3067478 2018-12-06 11:28:57
最近在学习一个代码自动生成代码的工具,然后尝试自己写一个依赖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包的文件结构如图所示
查看完整描述

4 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

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

查看完整回答
反对 回复 2018-12-16
?
莫回无

TA贡献1865条经验 获得超7个赞

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

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

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

查看完整回答
反对 回复 2018-12-16
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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

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

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

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

我之前 写反了。

查看完整回答
反对 回复 2018-12-16
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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

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

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

查看完整回答
反对 回复 2018-12-16
  • 4 回答
  • 0 关注
  • 5891 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信