FileTransfer“Saved file:”后跟FileNotFoundException

时间:2014-02-06 21:46:33

标签: java android cordova

我的应用从远程网络服务器下载一个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

1 个答案:

答案 0 :(得分:0)

好的,某处有一个错误。我倾向于认为这是getAbsolutePath()中的一个错误,因为我在其他地方看到了一致的操作。

当我创建“文件更新”变量时,立即测试并记录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