java使用ant包写的一个zip压缩文件的工具类


/**
*包为apache下的ant包
*maven地址为
* <dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.2</version>
</dependency>
*
*
*/
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import java.io.*;



public class FileUtil {
    /**
     * 压缩文件
     * @param srcFileName:要压缩的文件或目录
     * @param zipFileName:压缩后的文件名
     */
    public static void compressFile(String srcFileName, String zipFileName) {
        File srcFile=new File(srcFileName);

        if(!srcFile.exists())
        {
            return;
        }
        File zipFile=new File(zipFileName);

        if(!zipFile.exists())
        {
            zipFile.getParentFile().mkdirs();//如果文件的父目录不存在,创建父目录
        }
        ZipOutputStream zos= null;
        try {
            zos = new ZipOutputStream(new FileOutputStream(zipFile));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        if(srcFile.isFile())
        {
            //单个文件
            compressFile(srcFile,zos,"");
        }else
        {
            //压缩目录
            String baseDir=srcFileName+File.separator;
            compressDirectory(srcFile,zos,baseDir);
        }
        try {
            zos.flush();
            zos.close();//zip使用完后,一定要关闭,否则在解压时会报文件损坏的错误
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    /**
     * 压缩文件
     * @param srcFile
     * @param zos
     * @param baseDir
     */
    private static void compressFile(File srcFile, ZipOutputStream zos,String baseDir) {
        //压缩单个文件
        if("".equals(baseDir))
        {
            try {
                zos.putNextEntry(new ZipEntry(srcFile.getName()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //压缩目录下的文件是,写入文件时,要添加在目录下的子目录名
        else
        {
            try {
                zos.putNextEntry(new ZipEntry(baseDir+srcFile.getName()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            //创建缓冲流读取文件,提高速度
            BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(srcFile));
            byte[] buffer=new byte[2048];
            int len;
            while((len=bufferedInputStream.read(buffer))!=-1)
            {
                //利用zip输出流写入文件
                zos.write(buffer,0,len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 压缩目录
     * @param srcFile
     * @param zos
     * @param baseDir
     */
    private static void compressDirectory(File srcFile,ZipOutputStream zos,String baseDir)
    {
       File[] files=srcFile.listFiles();
       for(File file:files)
       {
           if(file.isFile())
           {
               /**
                * 压缩文件
                */
               compressFile(file,zos,baseDir);
           }else
           {
               /**
                * 压缩目录
                */
               compressDirectory(file,zos,baseDir+file.getName()+File.separator);
           }
       }
    }
    public static  void main(String[] args) {
  
  
  compressFile("D:"+File.separator+"test.txt","D:"+File.separator+"testFile.zip");
compressFile("D:"+File.separator+"android-21","D"+File.separator+"testDirectory.zip");

    }
}
发布了5 篇原创文章 · 获赞 2 · 访问量 965

猜你喜欢

转载自blog.csdn.net/Andrew_2018/article/details/82533556
今日推荐