繁体   English   中英

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

[英]Android: ZipFile() java.util.zip.ZipException: File too short to be a zip file: 0

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

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

Neuralnet.zip位置的屏幕截图

问题:

以下代码抛出异常:

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

例外:

“java.util.zip.ZipException:文件太短而不能成为zip文件:0”

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

在API 26上,异常是不同的:

java.io.FileNotFoundException:文件不存在: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权限:我正在运行android api> 23,我在运行时请求READ_EXTERNAL_STORAGE权限。

清单包括:

<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

如何按名称从res / raw读取文件

我能够打开存档的内容,通过解决ZipFile()方法给出了另一个错误,因为它需要一个路径,而不是资源标识符。

仍然,打开存档文件,我使用了“No Body”提出的方法:

InputStream ins1 = getResources().openRawResource(getResources().getIdentifier("configuration", "raw", getPackageName()));
InputStream ins2 = getResources().openRawResource(getResources().getIdentifier("coefficients", "raw", getPackageName()));
InputStream ins3 = getResources().openRawResource(getResources().getIdentifier("updaterstate", "raw", getPackageName()));
model = restoreMultiLayerNetwork(ins1, ins2, ins3, false);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM