对指定文件或目录进行压缩和解压缩的工具类总结(二)
ion(e);
} finally {
IOHelper.close(zos);
}
}
/**
* 解压缩指定压缩文件(zip格式)
*
* @param src
* 要解压缩的文件
* @param destBasePath
* 解压缩后的文件存放的目录
*/
public static void unZip(File src, File destBasePath)
throws RuntimeException {
ZipInputStream zis = null;
BufferedOutputStream bos = null;
byte[] b = new byte[8192];
try {
zis = new ZipInputStream(new FileInputStream(src));
// 把压缩文件中获取到每个条目
for (java.util.zip.ZipEntry ze = null; (ze = zis.getNextEntry()) != null;) {
// 压缩文件中的每个条目就对应目标目录下的一个文件
File file = new File(destBasePath, ze.getName());
File parentFile = file.getParentFile();
if (!parentFile.exists()) { // 如果父目录下存在,就先创建
file.getParentFile().mkdirs();
}
// 针对文件创建出一个输出流
bos = new BufferedOutputStream(new FileOutputStream(file));
for (int len = 0; (len = zis.read(b)) != -1;) {
bos.write(b, 0, len);
}
bos.flush();
bos.close();
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
IOHelper.close(zis);
}
}
/**
* 递归获取指定目录下的所有子孙文件
*
* @param baseDir
* 要递归的目录
* @param allSubFiles
* 存放所有子孙文件的列表
*/
public static void getAllSubFiles(File baseDir, List
allSubFiles) {
if (baseDir.exists()) { // baseDir存在
if (baseDir.isDirectory()) { // 是目录
File[] subFiles = baseDir.listFiles(); // 获取它的所有子目录和了文件
int len = subFiles == null 0 : subFiles.length;
for (int i = 0; i < len; i++) {
getAllSubFiles(subFiles[i], allSubFiles); // 递归调用
}
} else {
allSubFiles.add(baseDir);
}
}
}
}