Как _directly_ получить список файлов из подкаталога в .JAR - JAVA - PullRequest
1 голос
/ 02 ноября 2011

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

Это похоже: Как мне перечислить файлы в файле JAR?

Но, к сожалению, метод, перечисленный выше, будет перебирать все файлы во всем .jar. При работе с .jar со многими файлами в нем - это непрактично, как в моем случае. Должен быть способ прямого пути к подкаталогу в .jar и итерации по его содержимому, без необходимости итерировать по всему содержимому jar, а затем фильтровать результаты, чтобы найти те записи, которые вас интересуют.

Вот примерно то, что у меня есть:

public static ArrayList<String> loadInternalFileListing(MetaDataType type, MetaDataLocation location, String siteId)
{
  ArrayList<String> filenameList = new ArrayList<String>();
  URL url = getInternalFile(type, null, location, siteId);

  JarURLConnection juc = null;
  JarFile jarFile = null;

  try
  {
    juc = (JarURLConnection) url.openConnection();
    jarFile = juc.getJarFile();
    Enumeration<JarEntry> entries = jarFile.entries();

    for(JarEntry jarEntry = entries.nextElement(); entries.hasMoreElements(); jarEntry = entries.nextElement())
    {
       ...//logic here
    }
  }
  ... //catch, handle exceptions, finally block and other logic

  return filenameList;
}

Переменная: url ->: jar: file: / C: /jboss-4.2.2.GA/server/username/tmp/deploy/tmp8421264930467110704SomeEar.ear- содержание / SomeBusiness.jar! / subdir1 / subdir2 / subdir3 / subdir4 /

Путь: / subdir1 / subdir2 / subdir3 / subdir4 / - это именно то место, где я хочу итерировать.

Отладка показывает, что juc действительно создан правильно и указывает на правильный путь. jarFile затем, как и ожидалось, просто дает мне путь к файлу jar, поэтому я теряю подкаталоги и почему я начинаю итерацию в корне. Это все имеет смысл. Это явно не правильный путь. Должен быть другой путь!

Возиться с JarURLConnection , который теоретически указывает на правильный каталог, который меня интересует, не дает ничего полезного. Существует JarURLConnection.getInputStream () . Отладчик указывает, что в конечном итоге он содержит ZipFileInputStream , но я не могу получить к нему доступ, и в дальнейшем он выглядит как просто ZipFileInputStream с ZipFile - что возвращает меня на круги своя.

1 Ответ

1 голос
/ 02 ноября 2011

извините, другого пути нет, по крайней мере, со стандартными библиотеками Java. zip-файл просто содержит список записей, в нем нет поиска с произвольным доступом. могут быть и другие библиотеки, которые анализируют список для вас и создают какую-то иерархическую карту записей, но в любом случае некоторый код должен перебирать все записи, чтобы найти то, что вам нужно.

...