将JAR资源作为FileStream打开

时间:2010-01-20 23:01:35

标签: java jar

我有一个项目,我想从另一个项目访问JAR中的资源。它不在我的类路径上,所以ClassLoader不是一个选项。我试过了:


new FileInputStream("C:\\mydir\\my.jar!\\myresource.txt");

并收到FileNotFoundException。

JarInputStream可能是一种可能,但我希望输入文件名的灵活性是jar资源,或者只是系统上的文件(用户决定)。是否有一个班级可以做到这一点,还是我必须自己建一个?

6 个答案:

答案 0 :(得分:3)

URLs are your friend

URL.openStream

答案 1 :(得分:1)

幸运的是,决定用“!”符号不起作用。

看看这里:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4730642

答案 2 :(得分:0)

尝试使用URLClassLoader。我之前做过类似的事情,它似乎有效(尽管你可能需要使用安全策略文件,如果你在一个安全的JVM中)。

答案 3 :(得分:0)

尝试使用java.net.JarURLConnection

网址url =新网址(“jar:file:C:\ mydir \ my.jar!\ myresource.txt”);

JarURLConnection jarConnection =(JarURLConnection)url.openConnection();

答案 4 :(得分:0)

  private InputStream twistLid(File jar, String resource) throws IOException {
    return new URL("jar:" + jar.toURI() + "!" + resource).openStream();
  }

答案 5 :(得分:0)

在上面的许多工作的基础上,这是groovy中的一个例子,在jar文件根级别的名为'reources'的文件夹中列出'resource.txt'中包含的文本

import java.io.*
import java.util.*
import java.util.jar.*

def getJarResourceAsStream(String jarName, String resource) throws IOException {
    def resourceStr = 'jar:' + (new File(jarName)).toURI() + '!' + resource
    return new URL(resourceStr).openStream()
}

def inputStream = getJarResourceAsStream('/some/file/path/myJar.jar', '/resources/resource.txt')

def reader = new InputStreamReader(inputStream)
BufferedReader buffer = new BufferedReader(reader)
String line
while((line = buffer.readLine()) != null) {
    System.out.println(line)
}