溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java怎么壓縮文件和文件夾

發(fā)布時間:2021-08-26 14:47:47 來源:億速云 閱讀:208 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要講解了“Java怎么壓縮文件和文件夾”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java怎么壓縮文件和文件夾”吧!

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

                        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.遞歸壓縮目錄結(jié)構(gòu)
 *
 * @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();
         }
    }

感謝各位的閱讀,以上就是“Java怎么壓縮文件和文件夾”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Java怎么壓縮文件和文件夾這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI