我的应用从远程网络服务器下载一个zip文件,然后将其解压缩。
javascript成功调用FileTransfer,其记录:
FileTransfer Saved file: file:///data/data/com.yadda.yadda/update.zip
作为成功函数的一部分,javascript调用我的自定义更新插件,该插件会立即测试该文件:
Context ctx = this.cordova.getActivity().getBaseContext();
File update = new File(ctx.getFilesDir(),"update.zip");
if(!update.exists()) Log.w("File not found",update.getAbsolutePath());
最后一行的日志是:
File Not Found /data/data/com.yadda.yadda/update.zip
稍后在try / catch块中我创建了一个InputStream变量,其中一个catch块是FileNotFoundException,它每次都会触发。
开始编辑 - 更多信息
FileNotFoundException有一点有趣。文件路径错误 - 即使我发送相同的“更新”变量来创建FileInputStream
InputStream fileis = new FileInputStream(update);
异常的有趣之处:
Caused by: java.io.FileNotFoundException: /data/data/com.yadda.yadda/files/update.zip
结束编辑
这里出了什么问题? Cordova记录文件传输完成并保存文件,但是当我测试它时文件不存在!当我创建FileInputStream时,为什么路径不同,导致异常?
我错过了什么?在应用程序的IOS版本中,一切正常。
编辑2:每个请求,我浏览了设备文件系统,发现update.zip确实存在于/data/user/0/com.yadda.yadda
答案 0 :(得分:0)
当我创建“文件更新”变量时,立即测试并记录update.getAbsolutePath() - 它显示正确的路径。但是当我尝试创建FileInputStream时,路径是不同的(+ / files /)
所以,稍微搜索一下,我发现为了访问应用程序数据目录(没有/ files),我必须使用新的File命令发送一个不同的目录。这是它的样子:
File update = new File(ctx.getApplicationInfo().dataDir,"update.zip");
使用getFilesDir()
获取目录ctx.getFilesDir() = /data/data/com.yadda.yadda/files
获取正确的目录
ctx.getApplicationInfo().dataDir = /data/data/com.yadda.yadda