java - Android: ZipFile() java.util.zip.ZipException: 文件太短而不能成为 zip 文件: 0

标签 java android keras zip dl4j

我正在开发一个项目(使用 Android Studio 3.1.4),该项目读取存储为 .zip 文件的神经网络,以便在 Android 中进一步使用 DL4J。

我正在尝试打开位于我的项目 res\raw 目录中的这个 .zip 文件。为此,我尝试使用 java.util.zip 中的 ZipFile() 方法。

Screenshot of location of neuralnet.zip

问题:

以下代码抛出异常:

File model_file = new File(String.valueOf(this.getResources().openRawResource(R.raw.neuralnet)));
ZipFile zipFile = new ZipFile(model_file);

异常(exception):

"java.util.zip.ZipException: File too short to be a zip file: 0"

因此我无法加载模型。在运行 Android API 24 的模拟设备上进行测试

在 API 26 上异常是不同的:

java.io.FileNotFoundException: File doesn't exist: android.content.res.AssetManager$AssetInputStream@ddde727

有人有使用 ZipFile() 的经验,或者有在 Android 中使用 DL4J 加载神经网络模型的经验吗?

build.gradle 中是否需要一些特殊的东西?

欢迎任何意见!

我尝试过的:

  • 检查 .zip 文件以确保它存在。
  • 确保 .zip 只是一个容器,并且文件未被压缩,方法是使用 7Zip 将包含的 3 个文件归档为 .zip 而无需压缩
  • 检查了 READ_EXTERNAL_STORAGE 权限,尽管我认为不需要它
  • 尝试使用完整路径而不是使用 this.getResources().openRawResource(R.raw.neuralnet)

安卓权限: 我正在运行 android api > 23,并且我在运行时请求 READ_EXTERNAL_STORAGE 权限。

list 包括:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

谢谢,

最佳答案

你的问题是打开文件的方式。

要打开原始文件,请查看以下链接:

https://developer.android.com/guide/topics/resources/providing-resources

How to read file from res/raw by name

关于java - Android: ZipFile() java.util.zip.ZipException: 文件太短而不能成为 zip 文件: 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172726/

相关文章:

Android:开始使用相机和图片上传/联网

python - 导入错误 : cannot import name 'backend'

java - 有什么方法可以将已经运行的浏览器附加到 java 中的 selenium webdriver?

使用 setcap 功能运行时 JLI_InitArgProcessing 的 Java "symbol lookup error"

java - 用逗号和空格分割输入的字符串

Android Maps API 示例不起作用?

java - 向 Swagger UI 添加基本身份验证

android - 如何以编程方式在 admob 上使用文字广告?

r - 在 R 中加载 h5 keras 模型文件

python - 如何将稀疏张量传递到 TF 2.0 中的密集层?