使用commons-compress包對(duì)tar.gz文件進(jìn)行解壓處理
想使用commons-compress-1.4.1.jar對(duì)tar.gz文件進(jìn)行處理,上網(wǎng)找半天,別人寫(xiě)的都很費(fèi)勁,看了看樣例,自己寫(xiě)了一個(gè)方法。/**
* 解壓tar.gz文件
* tar文件只是把多個(gè)文件或文件夾打包合成一個(gè)文件,本身并沒(méi)有進(jìn)行壓縮。gz是進(jìn)行過(guò)壓縮的文件。
* @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();
}
遺留問(wèn)題:
tar解壓tar.gz文件時(shí),中文文件夾有亂碼
研究發(fā)現(xiàn)commpress包解壓時(shí),TarArchiveInputStream類對(duì)中文未做處理,進(jìn)一步跟蹤,第一層是
utf8,正確,往下取,需要包括子文件夾,子文件,涉及到"/"等符號(hào)的切割,這個(gè)地方未考慮中文
據(jù)說(shuō)ant沒(méi)問(wèn)題
posted on 2012-06-15 12:12 滿店香 閱讀(6832) 評(píng)論(1) 編輯 收藏