gpt4 book ai didi

java - Android:获取 Zip 中的文件数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:52 25 4
gpt4 key购买 nike

我有一个看似简单的问题,但我似乎无法让它正常工作。

我的“ Assets ”文件夹中有一个 zip 文件需要解压,我有一个 ProgessBar,我想在其中向用户显示进度。

我一切正常,但我想将 ProgessBar 最大值设置为 zip 文件中的文件数。此文件夹中的文件数量有时会发生变化,因此我希望 ProgessBar 与 zip 中包含的文件数量相关。

我正在使用 ZipInputStream-API,但似乎没有办法获取 zip 文件中的文件数。我能想到的唯一方法就是这样做:

   ZipInputStream zin = new ZipInputStream(getAssets().open(
"myFile.zip"));
int numFiles = 0;
int increment = 0;
while (zin.getNextEntry() != null) {
numFiles++;
}

ZipEntry ze = null;
//Set the Max..value here..
progessBar.setMax(numFiles);
while ((ze = zin.getNextEntry()) != null) {
increment++;
progessBar.setProgress(increment);
}

这可行,但有两个 while 循环似乎有点多余,它们基本上做同样的事情。

我知道有一个 ZipFile-API,它有一个 size()-方法,但它需要一个文件路径,因为我的文件位于'assets' 文件夹我很确定从这个目录中读取的唯一方法是通过流媒体。

我有什么办法可以做到这一点吗?

最佳答案

感谢您的回答。我最终使用:AssetFileDescriptor API 获取 zip 文件的文件大小并将其设置为 ProgessBar.setMax() 值。然后,当我遍历 zip 内容时,我通过使用每个条目文件大小来增加进度。这可行,但我唯一担心的是 AssetFileDescriptor.getLength() 值以及 ZipEntry.getSize() 值返回一个 long 值,所以我不得不在设置最大值和/或递增 ProgessBar 之前将它们强制转换为整数,所以我有可能重载整数值导致异常,但这不是可能是因为我预计我的文件大小不会超过整数的最大容量。

ZipInputStream zin = new ZipInputStream(getAssets().open(
"myFile.zip"));
ZipEntry ze = null;
AssetFileDescriptor mydisc = getAssets().openFd("myFile.zip");
//Size of the zip package
long size = mydisc.getLength();
long increment = 0;
dialog.setMax((int) size);
while ((ze = zin.getNextEntry()) != null) {
increment += (int) ze.getSize();
progessBar.setProgess((int)increment);
//do more stuff..
}

不是最好的解决方案,但它有效。

我知道 ZipFile API,但它需要传入一个字符串,但我不确定该目录的路径是什么或如何获取它?

关于java - Android:获取 Zip 中的文件数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com