开发者

Issues with zipping files in Java

开发者 https://www.devze.com 2023-02-22 02:11 出处:网络
I am currently trying to zip all files within a directory. The zip file is being created and the files are being processed - but for some reason the file开发者_StackOverflows are not appearing within

I am currently trying to zip all files within a directory.

The zip file is being created and the files are being processed - but for some reason the file开发者_StackOverflows are not appearing within the zip file.

The code being used to complete this task is as follows:

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();
      }
  }
}

When reviewing the logging information, the files within the directories are being found and processed, but the created zip file contains no data.

Any help with this issues will be greatly appreciated.

Thanks


Apart from the fact that adding the file by its absolute path is probably not what you want, this code works just fine for me.


Hy, Give a set of files name to this function, and a zip name. It should work.

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);
        }
    }

All good to you, dAN

0

精彩评论

暂无评论...
验证码 换一张
取 消