文件路径出现在Zipped文件中

时间:2010-10-20 23:55:54

标签: java file zip

我有一个java程序,如下所示,用于整个压缩文件夹。

public static void zipDir(String dir2zip, ZipOutputStream zos) 

{ 

try 

{ 

           File zipDir= new File(dir2zip); 

            String[] dirList = zipDir.list(); 

          byte[] readBuffer = new byte[2156]; 

          int bytesIn = 0; 

      for(int i=0; i<dirList.length; i++) 

       { 

         File f = new File(zipDir, dirList[i]); 

      if(f.isDirectory()) 

      { 

                    String filePath = f.getPath(); 

           zipDir(filePath, zos); 

         continue; 

     } 

          FileInputStream fis = new FileInputStream(f); 

            ZipEntry anEntry = new ZipEntry(f.getPath()); 

                zos.putNextEntry(anEntry); 

       while((bytesIn = fis.read(readBuffer)) != -1) 

       { 

           zos.write(readBuffer, 0, bytesIn); 

        } 

      fis.close(); 

    } 

} 

catch(Exception e) 

{ 

 e.printStackTrace();

} 


}

public static void main(){
String date=new java.text.SimpleDateFormat("MM-dd-yyyy").format(new java.util.Date());

         ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("Output/" + date + "_RB" + ".zip"));

         zipDir("Output/" + date + "_RB", zos); 

         zos.close();
}

我的查询是。要压缩的目标文件夹(+ date + _RB)存在于名为Output的文件夹中。成功压缩后,当我解压缩压缩文件时,我找到一个文件夹Output,其中包含(+ date + _RB)所需文件夹。在提取压缩文件后我不需要输出文件夹,而是应该直接提取所需的文件夹。请同样告知。

更新

我试过艾萨克的回答。在提取生成的zip文件时,不会提取任何文件夹。只提取所有文件夹中的文件。我只是不需要在结果zip文件中单独使用文件夹“输出”。但该程序的作用是,它不会提取Output文件夹中的所有其他文件夹,而只是提取这些文件夹中的文件。请告知如何继续...

1 个答案:

答案 0 :(得分:2)

这是因为:

  

ZipEntry anEntry = new ZipEntry(f.getPath());

f.getPath()将在字符串的开头返回Output/。这是由于程序的流程以及它(错误)如何使用File对象。

我建议您构建一个名为tmp的文件对象:

File tmp = new File(dirList[i]);

更改f的构造:

File f = new File(zipDir, tmp.getPath());

然后,改变这个:

ZipEntry anEntry = new ZipEntry(f.getPath());

对此:

ZipEntry anEntry = new ZipEntry(tmp.getPath());

我没有时间对它进行实际测试,但简而言之,您的问题是由于File对象的构造方式。