【问题标题】:Read a file from inside of an external Jar file?从外部 Jar 文件中读取文件?
【发布时间】:2012-10-28 23:27:17
【问题描述】:

我正在尝试使用 java.. 从外部 jar 中读取文件。 例如,我有两个 jar 文件。一个是“foo.jar”,另一个是“bar.jar”。 “bar.jar”内部是文件“foo-bar.txt”。如何使用“foo.jar”中的代码从“bar.jar”中读取文件“foo-bar.txt”...?这甚至可能..? 我知道我可以使用 foo.jar 从 iside 读取文件

this.getClass().getClassLoader().getResourceAsStream("foo-bar.txt");

但我不知道如何从外部 jar 中执行此操作.. 有人可以帮助我吗?

【问题讨论】:

  • bar 是否提供访问此文件的方法?如果是这样,请将其添加到foo 的构建路径并使用适当的对象。

标签: java file jar external


【解决方案1】:

使用jar url打开连接示例代码

InputStream in = null;
String inputFile = "jar:file:/c:/path/to/my.jar!/myfile.txt";
if (inputFile.startsWith("jar:")){
  try {
    inputURL = new URL(inputFile);
    JarURLConnection conn = (JarURLConnection)inputURL.openConnection();
    in = conn.getInputStream();
  } catch (MalformedURLException e1) {
    System.err.println("Malformed input URL: "+inputURL);
    return;
  } catch (IOException e1) {
    System.err.println("IO error open connection");
    return;
  }
} 

【讨论】:

  • This 信息可能对文件 IO 有帮助。
【解决方案2】:

如果 jar 在您的类路径中,那么 getResourceAsStream 将起作用,但请注意它会在您的类路径中找到 first 实例。如果 foo.jar 和 bar.jar 都包含这个文件,那么它将返回类路径中的第一个 jar。

要从 jar 中读取它,请使用 JarFile.getEntryJarFile.getInputStream

【讨论】:

  • 我会这样做吗? JarFile j = new JarFile("bar.jar");j.getClass().getResourceAsStream("foo-bar.txt");
  • 没有。你需要j.getEntryj.getInputStream
  • 你能给我看一些代码吗? (我从代码 sn-ps 学得最好)
  • @Roman's (answer)[stackoverflow.com/a/13294687/18573] 更好并且有示例,但我承认我相信我的答案中有足够的信息不需要实际代码。你以前做过编程吗?
  • 相当多。但是很少有java。
猜你喜欢
  • 2014-06-05
  • 2015-12-23
  • 2015-11-30
  • 1970-01-01
  • 2012-12-25
  • 2011-04-09
  • 1970-01-01
  • 2013-12-08
相关资源
最近更新 更多