从外部Jar文件中读取文件?

3

我试图使用Java从外部jar文件中读取文件。例如,我有两个jar文件。一个是“foo.jar”,另一个是“bar.jar”。在“bar.jar”内部是文件“foo-bar.txt”。如何使用“foo.jar”中的代码从“bar.jar”内部读取文件“foo-bar.txt”?这是否可行?我知道我可以使用

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

但是我不知道如何从外部jar包中实现它...有人能帮助我吗?


bar提供了访问这个文件的方式吗?如果是的话,请将其添加到foo的构建路径中,并使用适当的对象。 - mre
2个回答

7
使用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;
  }
} 

这些信息对于文件IO可能会有所帮助。 - Roman C

5
如果JAR文件在您的类路径中,那么getResourceAsStream将起作用,但请注意它会在您的类路径中找到第一个实例。如果foo.jar和bar.jar都包含此文件,则它将返回类路径中排在前面的任何一个jar包。
要从JAR文件中读取它,请使用JarFile.getEntryJarFile.getInputStream

我应该这样做吗?JarFile j = new JarFile("bar.jar"); j.getClass().getResourceAsStream("foo-bar.txt"); - Nathan F.
不行。你需要使用 j.getEntryj.getInputStream - Miserable Variable
你能给我展示一些代码吗?(我最喜欢从代码片段中学习) - Nathan F.
@Roman的回答更好,而且还有示例,但我承认我相信我的回答中已经有足够的信息不需要实际代码。你以前做过编程吗? - Miserable Variable
相当多。但很少用Java。 - Nathan F.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接