从.zip文件解压缩单个文件与android中的多个文件

时间:2011-08-09 14:55:02

标签: android unzip

我试图从非常大的zip存档中获取一个文件(我知道它的名字)。这个档案包含大约100000个文件,因为我不想在循环中找到我的文件。我认为这必须是针对这种情况的一些解决方案,例如Linux上的命令。

unzip archive.zip myfile.txt

我写了以下代码

try  { 
   FileInputStream fin = new FileInputStream(rootDir+"/archive.zip"); 
   ZipInputStream zin = new ZipInputStream(fin); 
   ZipEntry ze = new ZipEntry("myfile.txt");

   FileOutputStream fout = new FileOutputStream(rootDir+"/buff/" + ze.getName());
   for (int c = zin.read(); c != -1; c = zin.read()) { 
      fout.write(c); 
   } 

   zin.closeEntry(); 
   fout.close(); 
   zin.close();

} catch(Exception e) { 
   Log.e("Decompress", "unzip", e); 
}

此代码在buff目录中创建新文件,但此文件为空! 请帮我解决这个问题!

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

我对Java很新,但API文档包含标准Java库的相当大量的信息,包括java.util.zip。从那里进入ZipFile条目,您可以向下滚动到方法列表以查找名为getEntry的方法。这似乎是你应该开始的路线!

编辑:请记住,您可能需要在拨打电话时包含目录(例如:“dir \ subdirF \ subdirW \ FileThatYouWant.txt”),因为这似乎是当你逐一进行文件命名的方式。

编辑2:这里提供了大量的信息:Compressing and Decompressing Data Using Java APIs,如果您愿意阅读:D。 受内存限制的影响,唯一合理的解决方案可能是使用ZipInputStream对象,AFAIK会要求您逐步浏​​览存档中的每个ZipEntry(平均50,000个?),但不需要加载整个文件进入内存。就性能而言,我猜想手动单步执行将与当前实现此利基功能的效率一样高效。