ZipUtil

public class ZipUtil
extends Object

java.lang.Object
   ↳ com.android.tradefed.util.ZipUtil


用於壓縮相關作業的輔助類別

摘要

公用建構函式

ZipUtil()

公用方法

static void addToZip(ZipOutputStream out, File file, List<String> relativePathSegs)

Recursively adds given file and its contents to ZipOutputStream

static void applyPermission(File targetFile, CentralDirectoryInfo zipEntry)

套用中央目錄項目中設定的檔案權限。

static void closeZip(ZipFile zipFile)

關閉開啟的 ZipFile,忽略任何例外狀況。

static File createZip(File dir, String name)

公用程式方法,用於建立包含指定目錄及其所有內容的暫時性 ZIP 檔案。

static File createZip(File dir)

公用程式方法,用於建立包含指定目錄及其所有內容的暫時性 ZIP 檔案。

static File createZip(List<File> files)

Utility method to create a temporary zip file containing the given files

static File createZip(List<File> files, String name)

公用程式方法,用於建立包含指定檔案的臨時 ZIP 檔案。

static void createZip(List<File> files, File zipFile)

Utility method to create a zip file containing the given files

static void createZip(File dir, File zipFile)

公用程式方法,用於建立包含指定目錄及其所有內容的 ZIP 檔案。

static File extractFileFromZip(ZipFile zipFile, String filePath)

公用程式方法,可將 ZIP 檔案中的特定檔案解壓縮至暫時檔案

static void extractZip(ZipFile zipFile, File destDir)

Utility method to extract entire contents of zip file into given directory

static void extractZip(ZipFile zipFile, File destDir, Predicate<ZipEntry> shouldExtract)

Utility method to extract contents of zip file into given directory

static File extractZipToTemp(File zipFile, String nameHint)

將 ZIP 檔案解壓縮至以字串為前置字串的暫時目錄

static List<CentralDirectoryInfo> getZipCentralDirectoryInfos(File partialZipFile, EndCentralDirectoryInfo endCentralDirInfo, long offset, boolean useZip64)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

static List<CentralDirectoryInfo> getZipCentralDirectoryInfos(File partialZipFile, EndCentralDirectoryInfo endCentralDirInfo)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

static List<CentralDirectoryInfo> getZipCentralDirectoryInfos(File partialZipFile, EndCentralDirectoryInfo endCentralDirInfo, boolean useZip64)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

static List<CentralDirectoryInfo> getZipCentralDirectoryInfos(File partialZipFile, EndCentralDirectoryInfo endCentralDirInfo, long offset)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

static void gzipFile(File file, File gzipFile)

Helper 方法,用於建立單一檔案的 gzip 壓縮版本。

static boolean isZipFileValid(File zipFile, boolean thorough)

公用程式方法,用於確認 ZIP 檔案未損毀。

static void unzipPartialZipFile(File partialZip, File targetFile, CentralDirectoryInfo zipEntry, LocalFileHeader localFileHeader, long startOffset)

從部分 ZIP 檔案中解壓縮單一要求檔案。

static void unzipPartialZipFolder(File targetFile, CentralDirectoryInfo zipEntry)

從部分 ZIP 檔案中擷取要求的資料夾,並套用適當權限。

受保護的方法

static void validateDestinationDir(File destDir, String filename)

公用建構函式

ZipUtil

public ZipUtil ()

公用方法

addToZip

public static void addToZip (ZipOutputStream out, 
                File file, 
                List<String> relativePathSegs)

將指定檔案及其內容遞迴新增至 ZipOutputStream

參數
out ZipOutputStreamZipOutputStream

file File:要新增至串流的 File

relativePathSegs List:檔案的相對路徑,包括分隔符

擲回
IOException 如果無法將檔案新增至 ZIP 檔案

applyPermission

public static void applyPermission (File targetFile, 
                CentralDirectoryInfo zipEntry)

套用在中央目錄項目中設定的檔案權限。

參數
targetFile File:要設定權限的 File

zipEntry CentralDirectoryInfo:包含檔案權限的 CentralDirectoryInfo 物件。

擲回
IOException 如果無法存取檔案。

closeZip

public static void closeZip (ZipFile zipFile)

關閉開啟的 ZipFile,忽略任何例外狀況。

參數
zipFile ZipFile:要關閉的檔案

createZip

public static File createZip (File dir, 
                String name)

公用方法,用於建立包含指定目錄及其所有內容的暫時性 ZIP 檔案。

參數
dir File:要壓縮的目錄

name String:建立的 ZIP 檔案基本名稱,不含副檔名。

傳回
File 暫時性 ZIP File,內含目錄內容

擲回
IOException 如果無法建立 ZIP 檔案

createZip

public static File createZip (File dir)

公用方法,用於建立包含指定目錄及其所有內容的暫時性 ZIP 檔案。

參數
dir File:要壓縮的目錄

傳回
File 暫時性 ZIP File,內含目錄內容

擲回
IOException 如果無法建立 ZIP 檔案

createZip

public static File createZip (List<File> files)

公用程式方法,用於建立包含指定檔案的暫存 ZIP 檔案

參數
files List:要壓縮的檔案清單

傳回
File 暫時性 ZIP File,內含目錄內容

擲回
IOException 如果無法建立 ZIP 檔案

createZip

public static File createZip (List<File> files, 
                String name)

公用程式方法,用於建立包含指定檔案的臨時 ZIP 檔案。

參數
files List:要壓縮的檔案清單

name String:建立的 ZIP 檔案基本名稱,不含副檔名。

傳回
File 暫時性 ZIP File,內含目錄內容

擲回
IOException 如果無法建立 ZIP 檔案

createZip

public static void createZip (List<File> files, 
                File zipFile)

公用程式方法,用於建立包含指定檔案的 ZIP 檔案

參數
files List:要壓縮的檔案清單

zipFile File:要建立的 ZIP 檔案,這個檔案不應已存在

擲回
IOException 如果無法建立 ZIP 檔案

createZip

public static void createZip (File dir, 
                File zipFile)

公用程式方法,用於建立包含指定目錄及其所有內容的 ZIP 檔案。

參數
dir File:要壓縮的目錄

zipFile File:要建立的 ZIP 檔案,這個檔案不應已存在

擲回
IOException 如果無法建立 ZIP 檔案

extractFileFromZip

public static File extractFileFromZip (ZipFile zipFile, 
                String filePath)

公用程式方法,可將 ZIP 檔案中的特定檔案解壓縮至暫時檔案

參數
zipFile ZipFile:要擷取的 ZipFile

filePath String:要解壓縮的 filePath

傳回
File File,如果找不到則為空值

擲回
IOException 如果無法解壓縮檔案

extractZip

public static void extractZip (ZipFile zipFile, 
                File destDir)

公用程式方法,可將 ZIP 檔案的完整內容解壓縮至指定目錄

參數
zipFile ZipFile:要擷取的 ZipFile

destDir File:要將檔案解壓縮至的本機目錄

擲回
IOException 如果無法解壓縮檔案

extractZip

public static void extractZip (ZipFile zipFile, 
                File destDir, 
                Predicate<ZipEntry> shouldExtract)

公用程式方法,可將 ZIP 檔案內容解壓縮至指定目錄

參數
zipFile ZipFile:要擷取的 ZipFile

destDir File:要將檔案解壓縮至的本機目錄

shouldExtract Predicate:判斷是否應擷取 ZipEntry 的述詞

擲回
IOException 如果無法解壓縮檔案

extractZipToTemp

public static File extractZipToTemp (File zipFile, 
                String nameHint)

將 ZIP 檔案解壓縮至以字串為前置字元的暫時目錄

參數
zipFile File:要解壓縮的 zip 檔案

nameHint String:暫時目錄的前置字串

傳回
File 指向暫存目錄的 File

擲回
IOException
ZipException

getZipCentralDirectoryInfos

public static List<CentralDirectoryInfo> getZipCentralDirectoryInfos (File partialZipFile, 
                EndCentralDirectoryInfo endCentralDirInfo, 
                long offset, 
                boolean useZip64)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

參數
partialZipFile File:部分 ZIP 檔案的 File 物件,內含中央目錄項目。

endCentralDirInfo EndCentralDirectoryInfo:ZIP 檔案的 EndCentralDirectoryInfo 物件。

offset long:部分 ZIP 檔案中的位移,中央目錄項目的內容會從這個位置開始。

useZip64 boolean:布林值,用於支援部分下載中的 zip64 格式。

傳回
List<CentralDirectoryInfo> ZIP 檔案的 CentralDirectoryInfo 清單

擲回
java.io.IOException
IOException

getZipCentralDirectoryInfos

public static List<CentralDirectoryInfo> getZipCentralDirectoryInfos (File partialZipFile, 
                EndCentralDirectoryInfo endCentralDirInfo)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

參數
partialZipFile File:部分 ZIP 檔案的 File 物件,內含中央目錄項目。

endCentralDirInfo EndCentralDirectoryInfo:ZIP 檔案的 EndCentralDirectoryInfo 物件。

傳回
List<CentralDirectoryInfo> ZIP 檔案的 CentralDirectoryInfo 清單

擲回
java.io.IOException
IOException

getZipCentralDirectoryInfos

public static List<CentralDirectoryInfo> getZipCentralDirectoryInfos (File partialZipFile, 
                EndCentralDirectoryInfo endCentralDirInfo, 
                boolean useZip64)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

參數
partialZipFile File:部分 ZIP 檔案的 File 物件,內含中央目錄項目。

endCentralDirInfo EndCentralDirectoryInfo:ZIP 檔案的 EndCentralDirectoryInfo 物件。

useZip64 boolean:布林值,用於支援部分下載中的 zip64 格式。

傳回
List<CentralDirectoryInfo> ZIP 檔案的 CentralDirectoryInfo 清單

擲回
java.io.IOException
IOException

getZipCentralDirectoryInfos

public static List<CentralDirectoryInfo> getZipCentralDirectoryInfos (File partialZipFile, 
                EndCentralDirectoryInfo endCentralDirInfo, 
                long offset)

取得 ZIP 檔案中檔案的 {link CentralDirectoryInfo} 清單。

參數
partialZipFile File:部分 ZIP 檔案的 File 物件,內含中央目錄項目。

endCentralDirInfo EndCentralDirectoryInfo:ZIP 檔案的 EndCentralDirectoryInfo 物件。

offset long:部分 ZIP 檔案中的位移,中央目錄項目的內容會從這個位置開始。

傳回
List<CentralDirectoryInfo> ZIP 檔案的 CentralDirectoryInfo 清單

擲回
java.io.IOException
IOException

gzipFile

public static void gzipFile (File file, 
                File gzipFile)

建立單一檔案的 gzip 壓縮版本。

參數
file File:原始檔案

gzipFile File:要放置壓縮內容的檔案

擲回
java.io.IOException
IOException

isZipFileValid

public static boolean isZipFileValid (File zipFile, 
                boolean thorough)

公用程式方法,用於確認 ZIP 檔案未損毀。

參數
zipFile File:要檢查的 File

thorough boolean:是否嘗試完整解壓縮封存檔。如果 false,這個方法就無法偵測格式正確的封存檔中的 CRC 錯誤。

傳回
boolean false如果檔案似乎已毀損;true否則

擲回
IOException 如果無法開啟或讀取檔案

unzipPartialZipFile

public static void unzipPartialZipFile (File partialZip, 
                File targetFile, 
                CentralDirectoryInfo zipEntry, 
                LocalFileHeader localFileHeader, 
                long startOffset)

從部分 ZIP 檔案中解壓縮單一要求檔案。

這個方法假設所有檔案壓縮時都位於同一張磁碟上。

如果 ERROR(/targetFile) 是目錄,系統會建立空白目錄,不會包含任何內容。

如果 ERROR(/targetFile) 是符號連結,系統會建立符號連結,但不會解析。

目前不支援下列功能:

ZIP 檔案超過 4 GB

ZIP64(需要更新壓縮大小的 ZipLocalFileHeader)

加密 ZIP 檔案

參數
partialZip File:ZIP 檔案的部分內容 File

targetFile File:要將擷取檔案儲存至的 File

zipEntry CentralDirectoryInfo:要從部分 ZIP 檔案中擷取的檔案 CentralDirectoryInfo 物件。

localFileHeader LocalFileHeader:要從部分 zip 檔案中擷取的檔案 LocalFileHeader 物件。

startOffset long:要擷取檔案的起始偏移。

擲回
java.io.IOException
IOException

unzipPartialZipFolder

public static void unzipPartialZipFolder (File targetFile, 
                CentralDirectoryInfo zipEntry)

從部分 ZIP 檔案中擷取要求的資料夾,並套用適當權限。

參數
targetFile File:要將擷取檔案儲存至的 File

zipEntry CentralDirectoryInfo:要從部分 ZIP 檔案中擷取的檔案 CentralDirectoryInfo 物件。

擲回
java.io.IOException
IOException

受保護的方法

validateDestinationDir

protected static void validateDestinationDir (File destDir, 
                String filename)

參數
destDir File

filename String

擲回
IOException