Я ищу способ напрямую получить список всех файлов в указанном подкаталоге в .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 - что возвращает меня на круги своя.