我正在尝试实现一种方法,该方法在调用时从加载类的 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");
问题是,无论我提供什么类(class),我都会不断获得相同的资源。
我也尝试过:
is = c.getClassLoader().getResourceAsStream("/com/file.text");
这完全失败了。
如有任何建议,我们将不胜感激。
此外,从类加载器调用 getResourceAsStream 与从类调用 getResourceAsStream 有什么区别?
最佳答案
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();
您必须单独处理未震动的类文件夹。
关于java - 从 jar 中获取资源 : classloader vs class resourceasstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559846/