Java中压缩文件的问题

Java中压缩文件的问题,java,zip,Java,Zip,我目前正在尝试压缩目录中的所有文件 正在创建zip文件并处理这些文件,但由于某些原因,这些文件没有出现在zip文件中 用于完成此任务的代码如下所示: public class FileZipper { public void zipDir( String dir, String zipFileName ) { try{ File dirObj = new File(dir); ZipOutputStream out = ne

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

正在创建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();
      }
  }
}
公共类文件拉链{
public void zipDir(字符串dir,字符串zipFileName){
试一试{
File dirObj=新文件(dir);
ZipOutputStream out=newzipoutpstream(newfileoutputstream(zipFileName));
Logger.info(“创建:+zipFileName”);
addDir(dirObj,out);
out.close();
}
捕获(例外e){
Logger.error(e,“错误压缩目录”);
}
}
私有void addDir(文件dirObj,ZipOutputStream out)抛出IOException{
文件[]文件;
如果(!dirObj.isDirectory()){
files=新文件[]{dirObj};
}
否则{
files=dirObj.listFiles();
}
字节[]tmpBuf=新字节[1024];
对于(int i=0;i0){
out.write(tmpBuf,0,len);
}
out.closeEntry();
in.close();
}
}
}
查看日志信息时,会找到并处理目录中的文件,但创建的zip文件不包含任何数据

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


谢谢

除了按文件的绝对路径添加文件可能不是您想要的以外,这段代码对我来说很好。

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);
        }
    }
private void zipFiles(ArrayList listWithFiles,String zipName){
试一试{
字节[]缓冲区=新字节[1024];
//创建FileOutputStream的对象
FileOutputStream fout=新的FileOutputStream(zipName);
//从FileOutputStream创建ZipOutputStream的对象
ZipOutputStream zout=新的ZipOutputStream(fout);
用于(字符串currentFile:listWithFiles){
//为源文件创建FileInputStream的对象
FileInputStream fin=新的FileInputStream(当前文件);
//将文件添加到ZIP
新ZipEntry(当前文件));
//写入文件内容
整数长度;
而((长度=fin.read(缓冲区))>0){
写入(缓冲区,0,长度);
}
zout.closeEntry();
//关闭输入流
fin.close();
}
//关闭ZipOutputStream
zout.close();
}捕获(ioe异常ioe){
System.out.println(“IOException:+ioe”);
}
}
对你很好,
dAN

请有人重新标记这个,zipcode似乎与meMy完全无关。我向Riccardo道歉——身为英国人(有点天真),我突然得出结论,zipcode是与压缩文件相关的代码——不是你想发送邮件的地方。没问题,我不得不使用注释,因为我没有足够的声誉来重新标记,否则我会自己“默默地”完成它:-)谢谢你检查我的代码Joachim。我还从操作系统收到一条错误消息,表示压缩文件夹无效,因此我可能不得不假设是我的计算机阻止了文件的写入。当我使用
(又称当前目录)时作为起始点,ZIP文件包含路径,如
/some/directory//other/stuff.txt
。也许你的操作系统会因此窒息。尝试您选择的ZIP实用程序(WinZIP、7Zip、WinRAR等),感谢您对Joachim的帮助。问题在于绝对路径——当我把它们改为相对路径时,问题就解决了。嗨,丹。谢谢你的回答。我认为问题可能是我的操作系统的问题,而不是我的代码的问题。但是谢谢你的帮助。