blog
blog copied to clipboard
PhoneGap 中的 FileSystem
在阅读之前,你最好先熟悉 FileSystem API。我强烈向你推荐这篇文章。
最近做一个 PhoneGap 程序要读写手机里的文件,于是深入研究了一番在 PhoneGap 里的文件系统。下面的结论都是在_小米3_手机上测试出来的,在其它手机上可能会有点不同。
手机文件系统的关键目录
首先,必须得安装这个插件:cordova-plugin-file 并仔细阅读这个插件的自述文档。
为了看看自述文档里的 cordova.file 到底是个什么东西,我在 GapDebug 把这个对象打印出来了:

由此可以看到,这些关键的目录分为两种:内部存储目录和外部存储(即 SD 卡)目录。
但是目前的许多安卓手机也开始向 iPhone 学习,不允许安装 SD 卡了,比如我使用的小米3就是如此。经过反复测试,发现此时应该使用外部存储目录,即上图中的 external***Directory。一个可能的猜想:如果 external***Directory 不是 null,则应该使用外部存储目录。
开始使用 FileSystem
在调用 window.requestFileSystem() 函数的时候,请求临时文件系统(window.TEMPORARY)得到的 fs.root 就是 cordova.file.externalRootDirectory 的 DirectoryEntry 对象,请求持久化的文件系统(window.PERSISTENT)得到的 fs.root 就是 cordova.file.externalCacheDirectory 的 DirectoryEntry 对象。实际上,这两种对象都可以通过 window.resolveLocalFileSystemURL() 得到,这意味着你并不需要调用 requestFileSystem 来得到它们。
结语
是的,这篇文章并不长,但是我为此绕了半天的圈子。原因在于我并不知道小米3里所谓的“内部存储”实际上是 cordova.file 的外部存储目录,所以导致我总是读不到文件。另外吐槽一下小米3的 miui 系统真是麻烦,开启个 USB 调试还要绕很大的圈子,你可以参考这篇文章感受一下。