想使用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没问题