Перечисление XML-файлов в JAR-файл - PullRequest
0 голосов
/ 16 марта 2012

У меня есть сторонний jar-файл, содержащий несколько xml-файлов, которые я хотел бы обработать.Я не знаю ни имени, ни количества xml-файлов, но знаю папку, в которую они упакованы в банке.

URL url = this.class.getResource("/com/arantech/touchpoint/index");
System.out.println(url.toString());

это похоже на правильный путь к файлу (папке)

jar:file:/home/.m2/repository/com/abc/tp-common/5.2.0/tp-common-5.2.0.jar!/com/abc/tp/index

но когда я пытаюсь составить список файлов в папке, я всегда получаю исключение NullPointerException

File dir = new File(url.toString());
System.out.println(dir.exists());
System.out.println(dir.listFiles().length);

Любое руководство?

Ответы [ 2 ]

1 голос
/ 16 марта 2012

С этим вы можете пройти через основную папку:

URL url = this.class.getResource("/com/arantech/touchpoint/index");
JarFile jar;       
System.out.println("Loading JAR from: " + url.toString());

JarURLConnection URLcon = (JarURLConnection)(url.openConnection());
jar = URLcon.getJarFile();

Enumeration<JarEntry> entries = jar.entries();
while (entries.hasMoreElements())
{
  JarEntry entry = (JarEntry) entries.nextElement();
  if (entry.isDirectory() || !entry.getName().toLowerCase().endsWith(".xml"))
    continue;

  InputStream inputStream = null;
  try
  {
    inputStream = jar.getInputStream(entry);
    if (inputStream != null)
    {
      // TODO: Load XML from inputStream
    }
  }
  catch (Exception ex)
  {
    throw new IllegalArgumentException("Cannot load JAR: " + url);
  }
  finally
  {
    if (inputStream != null)
      inputStream.close();          
  }
}
jar.close();
0 голосов
/ 16 марта 2012

Jar - это Zip-файл, поэтому перечисление файлов в Jar можно выполнить с помощью:

ZipFile zipFile = new ZipFile("your.jar");
Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
while (zipEntries.hasMoreElements()) {
    System.out.println(zipEntries.nextElement().getName());
}

ZipEntry.getName () содержит путь входа (хотя он не задокументирован), поэтомувы можете обнаружить те, которые вам нужны, используя что-то вроде String.startsWith ("ваш / путь") .

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