我正在寻找一种直接获取.jar中指定子目录中所有文件的列表的方法。
这类似于:How do I list the files inside a JAR file?
但不幸的是,上面列出的方法将迭代整个.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;
}变量: jar:file:/C:/jboss-4.2.2.GA/server/username/tmp/deploy/tmp8421264930467110704SomeEar.ear-contents/SomeBusiness.jar!/subdir1/subdir2/subdir3/subdir4/:url ->
路径:/subdir1/subdir2/subdir3/subdir2 4/正是我想要迭代的地方。
调试表明,确实正确地创建了juc并指向正确的路径。然后,正如预期的那样,jarFile只给我jar文件路径,这就是为什么我失去了子目录并开始在根目录下迭代的原因。这一切都有道理。这显然不是正确的方法。一定有别的办法!
使用理论上指向我感兴趣的正确目录的JarURLConnection并不能显示出任何有用的信息。有JarURLConnection.getInputStream()。调试器表明,这最终保存了一个ZipFileInputStream,但我无法访问它,从长远来看,它看起来就像ZipFileInputStream到ZipFile --这使我回到了第一步。
发布于 2011-11-01 20:57:29
对不起,没有其他方法,至少没有标准的java库。一个zip文件只包含一个条目列表,其中没有“随机访问”查找。可能还有其他库为您解析列表并创建某种层次的条目映射,但无论哪种方式,一些代码都需要遍历所有条目以找到所需的内容。
https://stackoverflow.com/questions/7972678
复制相似问题