Como _directly_ obter uma lista de arquivos de um subdiretório em um arquivo .JAR - JAVA
Estou procurando uma maneira dediretament obtém uma lista de todos os arquivos em um subdiretório especificado em um arquivo .ja
Isso é semelhante:Como listar os arquivos dentro de um arquivo JAR?
Mas infelizmente o método listado acima irá repetir todos os arquivos no arquivo .jar inteiro. Ao trabalhar com um .jar com muitos arquivos, isso parece impraticável, como é o meu caso. É preciso haver uma maneira de direcionar diretamente para um subdiretório dentro do .jar e iterar sobre seu conteúdo, sem precisar iterar todo o conteúdo do jar e filtrar os resultados para encontrar as entradas mais importantes para você.
Aqui está mais ou menos o que eu tenho:
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;
}
A variável: url ->: jar: file: / C: /jboss-4.2.2.GA/server/username/tmp/deploy/tmp8421264930467110704SomeEar.ear-contents/SomeBusiness.jar! / subdir1 / subdir2 / subdir3 / subdir4 /
O caminho: / subdir1 / subdir2 / subdir3 / subdir4 / é exatamente onde eu quero itera
Debugging revela que juc é de fato criado corretamente e apontando para o caminho correto. jarFile então, como esperado, apenas me fornece o caminho do arquivo jar; é por isso que perco os subdiretórios e por que começo a iterar na raiz. Tudo isso faz sentido. Essa claramente não é a maneira correta. Tem que haver outra maneira
Messendo com o JarURLConnection, que teoricamente aponta para o diretório correto no qual estou interessado, não revela nada de útil. Há sim JarURLConnection.getInputStream (). O depurador indica que, no final das contas, isso contém um ZipFileInputStream, mas não consigo acessar, e, olhando mais adiante, parece que é apenas o ZipFileInputStream ao ZipFile - o que me coloca de volta na estaca zer