我有一个项目,我想从另一个项目访问JAR中的资源。它不在我的类路径上,所以ClassLoader不是一个选项。我试过了:
new FileInputStream("C:\\mydir\\my.jar!\\myresource.txt");
并收到FileNotFoundException。
JarInputStream可能是一种可能,但我希望输入文件名的灵活性是jar资源,或者只是系统上的文件(用户决定)。是否有一个班级可以做到这一点,还是我必须自己建一个?
答案 0 :(得分:3)
URL.openStream
。
答案 1 :(得分:1)
看看这里:
答案 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)
}