2012-06-06 76 views
1

目前,我有下面的代碼,它使用一個ZipInputStream到一個zip文件解壓到手機上的一個目標位置:可以確定要解壓縮文件的大小嗎?

ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(sourceZipFile)); 
ZipEntry zipEntry = null; 

while ((zipEntry = zipInputStream.getNextEntry()) != null) 
{ 
    File zipEntryFile = new File(targetFolder, zipEntry.getName()); 
    // write contents of 'zipEntry' to 'zipEntryFile' 

有誰知道是否有可能(使用上述或其他的設置),以獲得(估計)在開始之前要解壓縮的文件或字節的總數,並且隨着解壓縮的進行而增加進度?我認爲ZipInputStream可能有getTotalEntries()或類似的方法,但找不到像這樣的東西...

回答

3

使用ZipEntry#getSize()方法。它返回未壓縮的文件大小

如果您在ZIP文件中有多個條目(文件),只需遍歷它們(不提取它們)並將所有文件大小相加即可。這可能是一個相當不錯的估計。

請注意,如果您需要知道這些文件在磁盤上佔用的確切字節數,您還需要知道文件系統中的確切大小cluster

+0

關於集羣的好評! – trumpetlicks

+0

感謝您的回答。我遇到了一個'java.util.zip.ZipFile'類,它有一個'size()'方法以及一個'entries()'方法來訪問zip條目。我正在考慮使用它來代替'ZipInputStream',以避免必須通過zip條目進行雙重傳遞。你碰巧知道兩個('ZipFile'和'ZipInputStream')類在性能,內存使用等方面是否相似? –

+1

我從來沒有真正使用'ZipFile'。但檢查[此線程](http://stackoverflow.com/questions/4660819/java-util-zip-zipinputstream-v-s-zipfile)。 – npe

1

正如編者所言,ZipEntry將從zip文件中獲得文件的未壓縮大小。

我認爲你需要做的是進行使用

getNextEntry 

,直到完成,沿途(大小和條目的數量)計算的條目,然後重新啓動實際解壓後

一個通
+0

請參閱評論npe的答案。 –

相關問題