想使用commons-compress-1.4.1.jar對tar.gz文件進行處理,上網找半天,別人寫的都很費勁,看了看樣例,自己寫了一個方法。
/**
* 解壓tar.gz文件
* tar文件只是把多個文件或文件夾打包合成一個文件,本身并沒有進行壓縮。gz是進行過壓縮的文件。
* @param dir
* @param filepath
* @throws Exception
*/
public static void deGzipArchive(String dir, String filepath)
throws Exception {
final File input = new File(filepath);
final InputStream is = new FileInputStream(input);
final CompressorInputStream in = new GzipCompressorInputStream(is, true);
TarArchiveInputStream tin = new TarArchiveInputStream(in);
TarArchiveEntry entry = tin.getNextTarEntry();
while (entry != null) {
File archiveEntry = new File(dir, entry.getName());
archiveEntry.getParentFile().mkdirs();
if (entry.isDirectory()) {
archiveEntry.mkdir();
entry = tin.getNextTarEntry();
continue;
}
OutputStream out = new FileOutputStream(archiveEntry);
IOUtils.copy(tin, out);
out.close();
entry = tin.getNextTarEntry();
}
in.close();
tin.close();
}
遺留問題:
tar解壓tar.gz文件時,中文文件夾有亂碼
研究發現commpress包解壓時,TarArchiveInputStream類對中文未做處理,進一步跟蹤,第一層是
utf8,正確,往下取,需要包括子文件夾,子文件,涉及到"/"等符號的切割,這個地方未考慮中文
據說ant沒問題