zipファイルでWindowsディレクトリを管理する

私はこれに関する最近の質問を見てきましたが、私は私の問題の解決策を見つけることができません。私はすべてのコンテンツ(基本的にテキストファイル)を含む一連のディレクトリを含むディレクトリを圧縮する必要があります。私がジップを開くと、同じディレクトリのリストを戻したいと思う。

私の問題は、私はコンテンツを圧縮することができますが、私のzipファイルは、(ディレクトリがない)普通のファイルだけで出てくるか、壊れてしまいます。誰もこれをしましたか?

私が掲示しているコードは、破損しているか、または一見空のジップを作り出しています。ここに私の方法があります(要約)

public zipDir

File dirObj = new File(fileDirectory);
    String outFilename = zipDirectory+File.separatorChar+filename+".zip";
    log.info("Zip Directory: " + outFilename);
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
    System.out.println("Creating : " + outFilename);
    addDir(dirObj, out);
    out.close();

addDir

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].getAbsolutePath());
      out.putNextEntry(new ZipEntry(files[i].getAbsolutePath()));
      int len;
      while ((len = in.read(tmpBuf)) > 0) {
        out.write(tmpBuf, 0, len);
      }
      out.closeEntry();
      in.close();
    }

メイン

zipDir(filename, properties);
0
追加された 著者 JB Nizet,
私には解決策がありますが、まだ投稿できません。私は明日投稿します。
追加された 著者 Jeff,

1 答え

私は解決策を見つけた。このコードは、私が必要とするものとまったく同じです。ディレクトリを圧縮し、ディレクトリ構造を維持します。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FolderZiper {
  public static void main(String[] a) throws Exception {
    zipFolder("c:\\a", "c:\\a.zip");
  }

  static public void zipFolder(String srcFolder, String destZipFile) throws Exception {
    ZipOutputStream zip = null;
    FileOutputStream fileWriter = null;

    fileWriter = new FileOutputStream(destZipFile);
    zip = new ZipOutputStream(fileWriter);

    addFolderToZip("", srcFolder, zip);
    zip.flush();
    zip.close();
  }

  static private void addFileToZip(String path, String srcFile, ZipOutputStream zip)
      throws Exception {

    File folder = new File(srcFile);
    if (folder.isDirectory()) {
      addFolderToZip(path, srcFile, zip);
    } else {
      byte[] buf = new byte[1024];
      int len;
      FileInputStream in = new FileInputStream(srcFile);
      zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
      while ((len = in.read(buf)) > 0) {
        zip.write(buf, 0, len);
      }
    }
  }

  static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip)
      throws Exception {
    File folder = new File(srcFolder);

    for (String fileName : folder.list()) {
      if (path.equals("")) {
        addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
      } else {
        addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
      }
    }
  }
}
1
追加された