java - 从 jar 中获取资源 : classloader vs class resourceasstream

标签 java resources jar classpath classloader

我正在尝试实现一种方法,该方法在调用时从加载类的 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/

相关文章:

java - hibernate +OSIV。 2 笔交易。可重复读取

java - (?,?,?) 附近的 SQL 语法错误

java - 最佳实践 : where to place user i/o files for a JAR package

Eclipse:令人困惑的添加到构建路径选项

java - Jackson 将空值反序列化为长数据类型

java - 替换 Controller 中的文本并将其放入属性文件中

java - 加载打包成jar、包含资源的java插件时出现问题

HTTP:部分更新资源(接受空字符串)的模式?

grails - 如何在 Grails 2.0 中从 war 文件中排除资源?

java - 如何从 .jar 创建 .exe