Android 来自Inputstream的文件对象

Android 来自Inputstream的文件对象,android,zipfile,zip4j,Android,Zipfile,Zip4j,我想在我的android应用程序中应用zip4j。我将一个演示zip文件放入assets文件夹(main/assets/test.zip)。我想用zip4j打开它: import net.lingala.zip4j.core.ZipFile; ... ZipFile zipFile = new ZipFile(new File("an/absolute/path/is/required")); 但是,应用zip4j所需的构造函数需要字符串对象(文件的绝对路径)或文件对象。但是Android的A

我想在我的android应用程序中应用zip4j。我将一个演示zip文件放入assets文件夹(
main/assets/test.zip
)。我想用zip4j打开它:

import net.lingala.zip4j.core.ZipFile;
...
ZipFile zipFile = new ZipFile(new File("an/absolute/path/is/required"));
但是,应用zip4j所需的构造函数需要
字符串
对象(文件的绝对路径)或
文件
对象。但是Android的AssetManager只返回一个
InputStream
。另外,请不要:AssetManger没有提供绝对路径或其他信息


那么,为了转换
InputStream的输入流is=getResources().getAssets().open(filename),我必须做什么转换为
java.io.File
对象,然后我可以将其应用于
ZipFile

处理资产时,这是一项非常常见的任务:

  • 从AssetManager获取AssetFileDescriptor:openFD(字符串文件名)
  • 从该AssetFileDescriptor获取文件描述符:getFileDescriptor()
  • 从FileDescriptor构造一个新文件
    file:///android_asset/
    是资产目录的绝对路径。我已经尝试过了。它不工作。zip文件位于资产文件夹中有什么特殊原因吗?您是否打算最终以这种方式将其与应用程序捆绑在一起?也许下载/复制zip文件到本地存储(从中可以获得
    文件
    )也是一种选择?或者,看看Android SDK附带的:它充当任何
    InputStream
    的包装器,这意味着您可以直接将其与
    getAssets()的结果一起使用。open(…)
    。是的,
    ZipInputStream
    正是我当前使用的
    Zip4j
    可能不建议在Android项目中使用。为什么?除了
    java.util.zip
    ,这个包还提供了什么?然后显示代码。。