我试图从非常大的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目录中创建新文件,但此文件为空! 请帮我解决这个问题!
谢谢你的时间!
答案 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个?),但不需要加载整个文件进入内存。就性能而言,我猜想手动单步执行将与当前实现此利基功能的效率一样高效。