最近在学习一个代码自动生成代码的工具,然后尝试自己写一个依赖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包的文件结构如图所示
用这个 ClassLoader.getSystemResources("images/background.png")
因为你打成jar包以后,在操作系统看来一个jar包是一个单独文件(操作系统观点single file而已)!
所以你如果想访问jar包中的文件(人的观点),需要使用stream,
所以你需要 使用getResourceAsStream(文件名)
恩恩 好的 已经解决了 谢谢啦
用getResource 和 getResourceAsStream都可以 主要是前面的用getClass 还是用getClassLoader().
用getClass().getResource("/template/TempEntity.vm”);path 不以’/'开头时默认是从此类所在的包下取资源
当使用 getClassLoader().getResource("template/TempEntity.vm"); ClassLoader默认则是从ClassPath根下获取,path不能以’/'开头,最终是由
我之前 写反了。
用getResource 和 getResourceAsStream都可以 主要是前面的用getClass 还是用getClassLoader().
用getClass().getResource("/template/TempEntity.vm”);path 不以’/'开头时默认是从此类所在的包下取资源
当使用 getClassLoader().getResource("template/TempEntity.vm"); ClassLoader默认则是从ClassPath根下获取,path不能以’/'开头