android - 从 .zip 文件中解压单个文件,在 android 中包含多个文件

标签 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 目录中创建新文件,但此文件为空! 请帮我解决这个问题!

感谢您的宝贵时间!

最佳答案

我是 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 个?),但不需要您将整个文件加载到内存中。就性能而言,我猜想手动单步执行与此利基功能的任何当前实现一样高效。

关于android - 从 .zip 文件中解压单个文件,在 android 中包含多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998213/

相关文章:

android - 使用 FrameLayout 将 TextView 置于 ImageView 之上

Android - 选择 Spinner 后将焦点设置在 EditText 上

android - Nativescript 应用程序可以解压缩 zip 文件吗?

R 读取 zip 数据文件而不解压缩它(信息丢失)

android - 添加依赖出错

android - fragment 如何设置属性 "windowSoftInputMode"

android - 选择像评级栏这样的 View

bash - 如何在 Amazon Linux 2 上解压缩?

python - Python 中的 ZipFile 模块出现错误的魔数(Magic Number)错误

linux - 如何在 Linux 上删除非常大的文件