【问题标题】:Android: ZipFile, FileNotFoundException when use Assets FilesAndroid:使用资产文件时出现 ZipFile、FileNotFoundException
【发布时间】:2012-11-19 18:48:02
【问题描述】:

我有问题。

我使用此代码读取 zip 文件的内容:

    File file = new File(TogglesManager.EXTERNAL_STORAGE_THEMES_DIRECTORY+"filename.zip");
    ZipFile zip = new ZipFile(file);

但是当我尝试使用资产时,我有一个 FileNotFoundException

要读取资产 zip 文件,我使用以下代码:

    File file = c.getFileStreamPath("assetsFile.zip");
    ZipFile zip = new ZipFile(file);

“文件”不为空,因为如果我写 file.getName(); 我会看到正确的文件名。

我不想使用ZipInputStream 类,而只想使用ZipFile

【问题讨论】:

标签: android file zip assets


【解决方案1】:

您无法使用正常的文件操作访问资产。您将不得不使用

AssetManager assetManager = mContext.getAssets();
InputStream is = assetManager.open("assetsFile.zip");

但由于 ZipFile 不以 InputStream 作为参数,所以你必须将资产文件复制到内部存储,然后使用File

进一步 AFAIK,apk 是压缩的,因此将压缩文件存储在 assets 中可能不会改变太多使用的存储空间,所以也许您不需要在 assets 中使用 zipfile。

【讨论】:

  • 非常感谢..还有另一种方法可以代替 ZipFile 或 ZipInputStream 来读取 Zip 文件而不提取它?
  • 我不太确定,但 ZipInputStream 应该使用您从assetManager.open 获得的 InputStream 来完成这项工作
  • Further AFAIK, apk is zipped, so storing a zipped file inside assets might not change storage used by much, so maybe you donot need to use zipfile inside assets. 确认并感谢
  • 你能确认声明的有效性@MuhammadBabar
  • @Killer 因为 APK 本身是压缩的,所以捆绑的文件会自动压缩。但对不起,因为线程很旧,所以我无法确认有效性。顺便说一句,您可以通过添加压缩和解压缩的文件并检查大小来自行验证。
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2011-12-14
  • 1970-01-01
  • 2015-04-08
  • 2011-07-02
相关资源
最近更新 更多