blog icon indicating copy to clipboard operation
blog copied to clipboard

PhoneGap 中的 FileSystem

Open lmk123 opened this issue 10 years ago • 0 comments

在阅读之前,你最好先熟悉 FileSystem API。我强烈向你推荐这篇文章

最近做一个 PhoneGap 程序要读写手机里的文件,于是深入研究了一番在 PhoneGap 里的文件系统。下面的结论都是在_小米3_手机上测试出来的,在其它手机上可能会有点不同。

手机文件系统的关键目录

首先,必须得安装这个插件:cordova-plugin-file 并仔细阅读这个插件的自述文档。

为了看看自述文档里的 cordova.file 到底是个什么东西,我在 GapDebug 把这个对象打印出来了: cordova.file

由此可以看到,这些关键的目录分为两种:内部存储目录和外部存储(即 SD 卡)目录。

但是目前的许多安卓手机也开始向 iPhone 学习,不允许安装 SD 卡了,比如我使用的小米3就是如此。经过反复测试,发现此时应该使用外部存储目录,即上图中的 external***Directory。一个可能的猜想:如果 external***Directory 不是 null,则应该使用外部存储目录。

开始使用 FileSystem

在调用 window.requestFileSystem() 函数的时候,请求临时文件系统(window.TEMPORARY)得到的 fs.root 就是 cordova.file.externalRootDirectoryDirectoryEntry 对象,请求持久化的文件系统(window.PERSISTENT)得到的 fs.root 就是 cordova.file.externalCacheDirectoryDirectoryEntry 对象。实际上,这两种对象都可以通过 window.resolveLocalFileSystemURL() 得到,这意味着你并不需要调用 requestFileSystem 来得到它们。

结语

是的,这篇文章并不长,但是我为此绕了半天的圈子。原因在于我并不知道小米3里所谓的“内部存储”实际上是 cordova.file 的外部存储目录,所以导致我总是读不到文件。另外吐槽一下小米3的 miui 系统真是麻烦,开启个 USB 调试还要绕很大的圈子,你可以参考这篇文章感受一下。

lmk123 avatar Jul 06 '15 04:07 lmk123