Открытие ресурса JAR как FileStream - PullRequest
5 голосов
/ 21 января 2010

У меня есть проект, в котором я хочу получить доступ к ресурсу в JAR из другого проекта. Это не в моем classpath, поэтому ClassLoader не вариант. Я попробовал:


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

и получил исключение FileNotFoundException.

Возможно, JarInputStream возможен, но я хочу, чтобы гибкость входного имени файла была ресурсом jar или просто файлом в системе (решает пользователь). Есть ли класс, который может это сделать, или я должен сам его создать?

Ответы [ 6 ]

3 голосов
/ 21 января 2010
1 голос
/ 21 января 2010

К счастью, решение с "!" символ не работает.

Посмотрите здесь:

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

0 голосов
/ 06 января 2012

Основываясь на работе многих выше, вот пример в groovy, перечисляющий текст, содержащийся в 'resource.txt' внутри папки с именем 'reources' на корневом уровне файла jar

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)
}
0 голосов
/ 21 января 2010
  private InputStream twistLid(File jar, String resource) throws IOException {
    return new URL("jar:" + jar.toURI() + "!" + resource).openStream();
  }
0 голосов
/ 21 января 2010

попробуйте использовать java.net.JarURLConnection

URL url = новый URL ("jar: file: C: \ mydir \ my.jar! \ Myresource.txt");

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

0 голосов
/ 21 января 2010

Попробуйте использовать URLClassLoader . Я уже делал нечто похожее на это раньше, и это похоже на работу (хотя вам может понадобиться обойти файл политики безопасности, если вы находитесь в защищенной JVM).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...