最近在工作中要实现文件或目录的压缩与解压缩,于是参考了一些资料,使用ant.jar(org.apache.tools.zip)实现了对资源的压缩与解压缩,并在windows与linux环境下测试通过。
有以下几点说明:
(1)使用org.apache.tools.zip而非java.util.zip的原因是java.util.zip并不支持中文的文件或目录名
(2)关于org.apache.tools.zip.ZipEntry的问题,在new ZipEntry(String path)时,如果path指向目录,则path最后要以"/"字符结尾,如果是文件,则不能含"/".在这里好像有一个缺陷,就是当压缩的是空目录时,如果是在window系统,File.seperator是 \ ,那么压缩空目录会有问题,这时就要把 "\" 替换成 "/" (当然这只是表面的理解,如果有时间还是需要看下文档或者源码)
(3)向外部暴露的方法是 public static void compress(String zipFilename, String[] paths) 和 public static void decompress(String unzipPath, String zipFilePath)
/**
* 压缩目录
*
* @param zos zip包输出流
* @param dirPath 被压缩目录的路径
* @param basePath 压缩进zip包里面相对于zip根目录的路径
* @throws Exception
*/
private static void zipDirectory(ZipOutputStream zos, String dirPath, String basePath) throws IOException {
File dir = new File(dirPath);
if (dir.exists()) {
File files[] = dir.listFiles();
if (files.length > 0) // 不为空目录情况
{
for (int i = 0; i < files.length; i++) {
if (files[i].isDirec