【发布时间】:2015-09-23 14:51:55
【问题描述】:
我想在我的安卓应用中应用 zip4j。我将演示 zip 文件放入资产文件夹 (main/assets/test.zip)。我想用 zip4j 打开它:
import net.lingala.zip4j.core.ZipFile;
...
ZipFile zipFile = new ZipFile(new File("an/absolute/path/is/required"));
但是,应用 zip4j 所需的构造函数需要 String 对象(文件的绝对路径)或 File 对象。但是 Android 的 AssetManger 只返回一个InputStream。也请不要:AssetManger 确实不提供绝对路径或其他东西。
那么,我需要做什么才能将InputStream is = getResources().getAssets().open(filename); 的输入流转换为java.io.File 对象,然后我可以将其应用于ZipFile
【问题讨论】:
-
file:///android_asset/是资产目录的绝对路径。 -
我已经试过了。它不起作用。
-
zip 文件位于 assets 文件夹中的任何特殊原因?您是否打算最终以这种方式将一个与您的应用程序捆绑在一起?也许将 zip 文件下载/复制到本地存储(然后您可以从中获取
File)也是一种选择?或者,查看 Android SDK 附带的java.util.zip.ZipInputStream:它充当任何InputStream的包装器,这意味着您可以直接将其与getAssets().open(...)的结果一起使用。 -
是的,
ZipInputStream正是我目前使用的。Zip4j可能不建议在 Android 项目中使用 -
为什么?除了
java.util.zip,这个包还提供什么?