我正在尋找一種方式直接到獲取.jar中指定子目錄內的所有文件的列表。如何_directly_從.JAR子目錄中獲取文件列表 - JAVA
這是類似的: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:文件:/ C:/jboss-4.2.2.GA/server/username/tmp /deploy/tmp8421264930467110704SomeEar.ear-contents/SomeBusiness.jar!/subdir1/subdir2/subdir3/subdir4/
的路徑:/ subdir1/subdir2/subdir3/subdir4 /正是我想要的迭代。
調試顯示juc確實正確創建並指向正確的路徑。 jar文件然後如預期,只是給了我的jar文件路徑,這就是爲什麼我失去了子目錄,爲什麼我開始迭代在根。這一切都有道理。這顯然不是正確的方法。必須有另一種方式!
亂收費JarURLConnection理論上指向我感興趣的正確目錄,沒有顯示任何有用的東西。有JarURLConnection.getInputStream()。調試器表明這最終持有ZipFileInputStream,但我無法訪問它,並進一步看起來像它只是ZipFileInputStream到ZipFile - 這使我回到了第一。
發佈後,我認爲這可能是由於zip文件的格式/結構造成的。謝謝。 –