Java壓縮文件和文件夾

很久沒有更新了……………………
此處省略一萬字。胡漢三又回來啦!!!!言歸正傳。。。java

本次主要是實現了功能:根據傳入的路徑,壓縮文件和文件夾,例如從A路徑下的文件壓縮到B目錄,其中包括空文件夾。廢話很少說,直接上代碼:(這是一個工具類,idea親測可用!!)apache

import java.util.zip.ZipFile;
                        import  org.apache.tools.zip.*;
                        import java.io.*;

                    /*********  1.壓縮文件和文件夾   *******/   
       public  static void zipFile(ZipOutputStream zipOutputStream, File file, String parentFileName) {
       FileInputStream in = null;
        try {
        org.apache.tools.zip.ZipEntry zipEntry = new org.apache.tools.zip.ZipEntry(parentFileName);
        //  ZipEntry zipEntry = new ZipEntry(file.getName());
        zipEntry.setTime(file.lastModified());
        zipOutputStream.putNextEntry(zipEntry);
        in = new FileInputStream(file);
        int len;
        byte[] buf = new byte[8 * 1024];
        while ((len = in.read(buf)) != -1) {
            zipOutputStream.write(buf, 0, len);
        }
        zipOutputStream.closeEntry();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    /**
 * 2.遞歸壓縮目錄結構
 *
 * @param zipOutputStream
 * @param file
 * @param parentFileName
 */
public  static void directory(org.apache.tools.zip.ZipOutputStream zipOutputStream, File file, String parentFileName) {
    File[] files = file.listFiles();
    String parentFileNameTemp = null;
    for (File fileTemp : files) {
        String   fileTempName = fileTemp.getName().substring(fileTemp.getName().indexOf(".") + 1);
        if(fileTempName.equals("zip")){
            fileTemp.delete();
            continue;
        }
        parentFileNameTemp = com.dy.core.sims.utils.StringUtils.isEmpty(parentFileName) ? fileTemp.getName() : parentFileName + "/" + fileTemp.getName();
        if (fileTemp.isDirectory()) {
            directory(zipOutputStream, fileTemp, parentFileNameTemp);
        }else {
            zipFile(zipOutputStream, fileTemp, parentFileNameTemp);
        }
    }

    if(files.length==0){
        try{
            zipOutputStream.putNextEntry(new ZipEntry (getPath(file)+File.separator));
        }catch (Exception e){
            e.printStackTrace();
            }

             }
          }

           //3.得到該文件在壓縮包中的相對路徑
      public  static  String getPath (File f) {
    String str1 = f.getAbsolutePath();
    int n1= str1.length();
    String str2 = f.getAbsolutePath();
    int n2= str2.length();
    String str3 = f.getName();
    int n3= str3.length();
    String str = str2.substring(n1-n3, n2);
    return str;
       }

                 /**
 * 4.壓縮文件目錄
 *
 * @param source 源文件目錄(單個文件和多層目錄)
 * @param destit 目標目錄
 */
public static Boolean  compressFiles(String source, String destit) {
    //判斷路徑是否存在
    String   de=destit.substring(0, destit.lastIndexOf("//")+2);
    File  targetFile=new File(source);
    File  fileTarget=new File(de);
    if(!targetFile.exists() || !fileTarget.exists()){
        return false;
    }
    File file = new File(source);
    org.apache.tools.zip.ZipOutputStream zipOutputStream = null;
    FileOutputStream fileOutputStream = null;
    try {
        fileOutputStream = new FileOutputStream(destit);
        zipOutputStream = new ZipOutputStream(fileOutputStream);
        if (file.isDirectory()) {
            directory(zipOutputStream, file, "");
        } else {
            zipFile(zipOutputStream, file, "");
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            zipOutputStream.close();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return  true;
      }

                /**
 * 測試
 *
 * @param args
 */
public static void main(String[] args) {

    try{

       Boolean  flag=compressFiles("D://Excel//","D://Excel//aa.zip");
        System.out.println(flag);
    }catch (Exception e){
        e.printStackTrace();
         }
    }

所有代碼就在這上面,須要用的jar包是org.apache.tools.zip,各位有須要的可參考,若有不正確,但願各位大神不惜賜教

相關文章
相關標籤/搜索