我已经使用Cordova File Plugin在移动设备上创建文件。下面是创建文件的代码:
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (dir) {
alert(cordova.file.dataDirectory);
dir.getFile("log.txt", { create: true }, function (file) {
alert("got the file: "+ file.name + ', ' + file.fullPath);
});
});
当我在Android手机上部署该应用程序时,该文件将成功创建,但在我的设备上找不到创建的文件。
尽管cordova.file.dataDirectory
指向我设备上的file:///data/data/io.cordova.myappId/files/
路径,但io.cordova.myappId
文件夹在data>data
路径中不存在,但在Android>data
路径中存在。顺便说一句,我同时检查了storage>Android>data>io.Cordova.myappId>files
和storage>data>data
,并且文件不存在。
这是因为:
创建的文件位于另一个地方,所以我在哪里可以找到?
或
因为它是私有文件,我的文件管理器无权访问,所以如何更改权限设置以拥有公共文件?
为什么无法在设备上找到文件?
该文件已成功创建,但是在我的设备上找不到该文件,因为我指示要创建该文件的dataDirectory
路径是私有路径,并且我的设备文件管理器无权访问(基于this table)。实际上dataDirectory
是Internal Storage
选项。
内部存储器:将私有数据存储在设备存储器中。
您可以将文件直接保存在设备的内部存储器中。通过默认情况下,保存到内部存储器的文件是您的私有文件应用程序和其他应用程序无法访问它们(用户)。当用户卸载您的应用程序时,这些文件是已删除。(reference)
如何创建公共文件?
因此,要在设备上创建一个可以使用文件管理器访问它的文件,我必须使用以下公共路径选项之一:externalDataDirectory
。以前,我以为是将文件存储在手机上没有的外部SD卡上,所以没有进行测试。但是,今天进行测试,它将在我的内部设备存储中的Android/data/<app-id>/files
路径中创建该文件,该文件是公共的,我可以使用设备文件管理器进行访问。
实际上,术语internal
和external
对我来说是一种误导,而external storage
可以是可移动存储介质(例如SD卡)或内部(不可移动)存储(reference)。
在Cordova中读取/连接文件很痛苦。我编写了一个使用promise来简化此过程的脚本。
将cordova-file-storage.js添加到您的项目中,然后您可以执行以下操作:
// the object you want to save
var objectToSave = { firstName: 'John', lastName: 'Doherty' };
// the filename and extension you want to use
var filename = 'whatever.txt';
// the data to write (convert JSON object to a string)
var data = JSON.stringify(objectToSave);
// call write with params, .then executes with the filePath once complete
fileStorage.write(filename, data).then(function(filePath) {
console.log(filePath);
})
.catch(function(err) {
// this executes if something went wrong
console.warn(err);
});
默认情况下,它使用外部存储。要使用用户无法访问的沙盒存储,请添加true
作为最后一个参数。