我正在尝试实现一个方法,在调用时,从jar中加载类的特定资源中获取一个字符串。
例如:
import mypath.myclass; //from a jar
String result = gitid.getGitId(myclass.class);
在我正在使用的支持上:
InputStream is = null;
BufferedReader br = null;
String line;
is = c.getResourceAsStream("/com/file.text");
问题是我不断获得相同的资源,无论我给它什么课程。
我也尝试过:
is = c.getClassLoader().getResourceAsStream("/com/file.text");
这完全失败了。
我们非常感谢任何建议。
另外,从类加载器调用getResourceAsStream与类有什么区别?
答案 0 :(得分:3)
Class.getResourceAsStream()
获得ClassLoader
个实例,与Class.getClassLoader()
来电几乎相同。
您可以做的是获取给定类的URL并将类资源路径替换为文件的路径。例如,以下代码将从同一个jar返回资源:
Class c = String.class;
URL u = c.getResource('/' + c.getName().replace('.', '/') + ".class");
String s = u.toString();
URL url = new URL(s.substring(0, s.indexOf('!')) + "!/META-INF/MANIFEST.MF");
InputStream is = url.openStream();
你必须单独处理不是jarred的类文件夹。
答案 1 :(得分:0)
可能所有类都由同一个ClassLoader实例加载。因此,只要资源的路径没有改变,您每次都会获得相同的资源。
此方法委托此对象的类加载器。如果此对象由引导类加载器加载,则该方法委托给ClassLoader.getSystemResourceAsStream(java.lang.String)。