在Java中压缩文件的问题

时间:2011-04-04 12:01:36

标签: java zip

我目前正在尝试压缩目录中的所有文件。

正在创建zip文件并正在处理文件 - 但由于某种原因,文件未出现在zip文件中。

用于完成此任务的代码如下:

public class FileZipper {

   public void zipDir( String dir, String zipFileName ) {
        try{
            File dirObj = new File(dir);
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
            Logger.info("Creating : " + zipFileName);
            addDir(dirObj, out);
            out.close();
        }
        catch (Exception e){
            Logger.error( e, "Error zipping directory" );
        }
  }

  private void addDir(File dirObj, ZipOutputStream out) throws IOException {
      File[] files;
      if( !dirObj.isDirectory() ){
          files = new File[] { dirObj };
      }
      else{
          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());
          Logger.info(" 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();
      }
  }
}

查看日志记录信息时,正在查找和处理目录中的文件,但创建的zip文件不包含任何数据。

对此问题的任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:2)

除了通过绝对路径添加文件可能不是您想要的这个事实之外,这段代码对我来说也很合适。

答案 1 :(得分:1)

HY, 为此函数提供一组文件名和一个zip名称。 它应该工作。

private void zipFiles (ArrayList<String> listWithFiles, String zipName) {

        try {

            byte[] buffer = new byte[1024];

            // create object of FileOutputStream
            FileOutputStream fout = new FileOutputStream(zipName);

            // create object of ZipOutputStream from FileOutputStream
            ZipOutputStream zout = new ZipOutputStream(fout);

            for (String currentFile : listWithFiles) {

                // create object of FileInputStream for source file
                FileInputStream fin = new FileInputStream(currentFile);

                // add files to ZIP
                zout.putNextEntry(new ZipEntry(currentFile ));

                // write file content
                int length;

                while ((length = fin.read(buffer)) > 0) {
                    zout.write(buffer, 0, length);
                }

                zout.closeEntry();

                // close the InputStream
                fin.close();
            }

            // close the ZipOutputStream
            zout.close();
        } catch (IOException ioe) {
            System.out.println("IOException :" + ioe);
        }
    }

对你有好处, 丹