Сканирование папки внутри JAR - PullRequest
2 голосов
/ 27 февраля 2012

Было задано много похожих вопросов, но я испытываю столько боли, что могу задать вопрос сам.

В любом случае, у меня есть файлы в jar file /ввода, и мне нужно прочитать список имен файлов в этой папке (а затем прочитать сами файлы).

Попытка # 1:

String path Main.class.getProtectionDomain().getCodeSource().getLocation().getPath();
// "/Applications/company/extensions/components/Box/Box/Box.jar"
String decoded = URLDecoder.decode(path, "UTF-8");
// "/Applications/company/extensions/components/Box/Box/Box.jar"
File[] files = (new File(decoded + "/input")).listFiles();
// files = null (bad)

Попытка # 2:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("input");
// url.file: "file:/Applications/company/extensions/components/Box/Box/Box.jar!/input"
// url.path: (ditto)
// url.protocol: "jar"
// url.host: ""
// url.query: null
// url.port: -1
java.net.URI uri = new java.net.URI(url.getProtocol(), url.getAuthority(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
// URISyntaxException --> "Relative path in absolute URI" (bad)

Другие промежуточные попытки, которые привели к тому же результату.Я просто не могу прочитать папку в этой банке ...

Кто-нибудь знает, как это исправить?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Согласно Как мне перечислить файлы в файле JAR?

CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
  URL jar = src.getLocation();
  ZipInputStream zip = new ZipInputStream(jar.openStream());
  /* Now examine the ZIP file entries to find those you care about. */
  ...
} 
0 голосов
/ 27 февраля 2012

Может быть, я неправильно понял ваш вопрос, но ... предполагается использовать пакет java.util.jar?

Вот пример: Отображение содержимого файла jar

Надеюсь, это поможет

...