簡體   English   中英

壓縮子目錄僅壓縮子目錄的內容,而不壓縮子目錄

[英]Zipping sub directories is zipping only content of sub directories but not the sub directories

下面是我試過的代碼。 它只壓縮子文件夾的內容,而不是我需要壓縮所有子文件夾以及內容的文件夾。 我在這里做錯了什么。 示例:我在演示文件夾中有一個文件夾“演示”,我有 a、b、c 文件夾。 我想壓縮 a、b、c 以及內容,並且 zip 不應包含演示的父級。

static void addDir(File dirObj, ZipOutputStream out) throws IOException {
        File[] files = dirObj.listFiles();
        byte[] tmpBuf = new byte[1024];

        for (int i = 0; i < files.length; i++) {
          if (files[i].isDirectory()) {
            addDir(files[i], out);
            continue;
          }
          FileInputStream in = new FileInputStream(files[i].getAbsolutePath());
          System.out.println(" Adding: " + files[i].getName());
          out.putNextEntry(new ZipEntry(files[i].getName()));
          int len;
          while ((len = in.read(tmpBuf)) > 0) {
            out.write(tmpBuf, 0, len);
          }
          out.closeEntry();
          in.close();
        }
      }

    public static void zipFiles(File[] subd) {

        String zipFile = "test.zip";

        try {

            FileOutputStream fos = new FileOutputStream(zipFile);

            ZipOutputStream zos = new ZipOutputStream(fos);

            for (File dir : subd) {

                addDir(dir, zos);

            }

            // close the ZipOutputStream
            zos.close();

        } catch (IOException ioe) {
            System.out.println("Error creating zip file: " + ioe);
        }

這是我為具有層次結構和沒有層次結構的 zip 文件和目錄所做的代碼。 zip.getHierarchy().equals("F")部分完成您想做的工作。 在此代碼中,您必須將源文件、目標、層次結構 (T/F) 作為參數傳遞。 此外,您可能需要一個 DTO 類。

public static void Start() throws IOException{ 

    FileOutputStream fos = new FileOutputStream(zip.getDestination());
    ZipOutputStream zipOut = new ZipOutputStream(fos);
    File fileToZip = new File(zip.getSourcePath());

        zipDirectory(fileToZip, fileToZip.getName(), zipOut);

    zipOut.close();
    fos.close();
}

public static void zipDirectory(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {

    if (fileToZip.isDirectory()) {

        File[] children = fileToZip.listFiles();

        for (File childFile : children) {
            if(zip.getHierarchy().equals("T")) {
                zipDirectory(childFile, childFile.getPath(), zipOut);
            }else if(zip.getHierarchy().equals("F")){
                zipDirectory(childFile, childFile.getName(), zipOut);
            }
        }
        return; 
    }
    doZip(fileToZip,fileName,zipOut);
}

public static void doZip(File fileToZip,String fileName,ZipOutputStream zipOut) throws IOException {
    FileInputStream fis = new FileInputStream(fileToZip);
    ZipEntry zipEntry = new ZipEntry(fileName);
    zipOut.putNextEntry(zipEntry);
    byte[] bytes = new byte[1024];
    int length;
    while ((length = fis.read(bytes)) >= 0) {
        zipOut.write(bytes, 0, length);
    }
    fis.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM