Java api到zip文件

时间:2012-02-24 21:07:31

标签: java android jar zip gzip

我正在使用java.util.zip压缩java中的一些文件。我遇到的问题是压缩文件将为所有父目录创建文件夹。例如,如果我在C:/folder1/folder2/folder3/file.txt有一个文件

这将创建一个压缩文件,其文件夹名为folder 1,然后是文件夹2,依此类推,直到file.txt。

我正在寻找的结果是一个压缩文件夹,根目录下只有file.txt文件,没有任何文件夹。

以下是一些示例代码

BufferedInputStream origin = null;
         FileOutputStream dest = new 
           FileOutputStream("c:\\zip\\myfigs.zip");
         ZipOutputStream out = new ZipOutputStream(new 
           BufferedOutputStream(dest));
         //out.setMethod(ZipOutputStream.DEFLATED);
         byte data[] = new byte[BUFFER];
         // get a list of files from current directory
         String files[] = {"C:/folder1/folder2/folder3/file.txt"};

         for (int i=0; i<files.length; i++) {
            System.out.println("Adding: "+files[i]);
            FileInputStream fi = new 
              FileInputStream(files[i]);
            origin = new 
              BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry(files[i]);
            out.putNextEntry(entry);
            int count;
            while((count = origin.read(data, 0, 
              BUFFER)) != -1) {
               out.write(data, 0, count);
            }
            origin.close();
         }
         out.close();
      } catch(Exception e) {
         e.printStackTrace();
      }

2 个答案:

答案 0 :(得分:1)

替换此行

ZipEntry entry = new ZipEntry(files[i]);

通过

ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/")+1));

创建zipEntry时,需要指定文件名而不是完整路径。

修改

一种更干净的方式(如Louis Wasserman评论)将使用File对象并获取文件名。这将是一种在压缩文件之前检查文件是否存在的方法。

答案 1 :(得分:0)

您可能想要查看在提出类似问题时给出的答案: How can i zip ...