2014-07-02 47 views
1

我正在通過.zip文件查看以確認所有包含的文件命名正確,並遇到一些麻煩。這裏的文件層次:ZipEntry.isDirectory()和枚舉<?擴展ZipEntry>只看到目錄內容,而不是目錄

-.zip 
    -dir 
    -file1 
    -file2 
    -file3 
    -file4 
    -file5 
    -file6 

代碼:

for (Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements();) { 
      ZipEntry entry = e.nextElement(); 
      System.out.println("ZipEntry name: " + entry.getName()); 
      ... 
} 

常用輸出:

ZipEntry name: dir/file1 
ZipEntry name: dir/file2 
ZipEntry name: dir/file3 
ZipEntry name: file4 
ZipEntry name: file5 
ZipEntry name: file6 

所需的輸出也會包含

ZipEntry name: dir/ 

奇怪的是,我有一個測試案例,我得到的願望ed輸出:使用通過電子郵件發送給我的相同層次結構的.zip文件。每當我使用我的機器上壓縮的.zip文件時,就會得到「常用輸出」。我真的希望有一致的行爲,但我無法弄清楚發生了什麼問題。有任何想法嗎?

在此先感謝!

回答

3

壓縮文件中沒有真正的目錄。有條目。並且ZipEntry#isDirectory()檢查條目的名稱是否以/結尾以確定它是否應被視爲目錄。所以,你的壓縮文件包含是

dir/file1 
dir/file2 
dir/file3 
file4 
file5 
file6 

對於陌生的情況下,壓縮可能實際上包含

dir/ // the entry won't actually have any content though 
dir/file1 
dir/file2 
dir/file3 
file4 
file5 
file6 

這是非常有用的壓縮文件管理器,以確定項目應如何提取。

+0

感謝一束,我現在應該能夠把事情做好,我知道什麼是正確的行爲! – PunDefeated