我使用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
,该文件不存在。
这是因为:
创建的文件位于其他地方,我在哪里可以找到它?
或
因为它是私有的,而我的文件管理器无法访问它,所以如何更改权限设置以获得公共文件?
答案 0 :(得分:31)
为什么我在设备上找不到该文件?
该文件已成功创建但我在我的设备上找不到该文件,因为我指示创建该文件的dataDirectory
路径是私有路径,而我的设备文件管理器无法访问它(基于this table)。实际上dataDirectory
是Internal Storage
选项。
内部存储:将私人数据存储在设备内存中。
您可以直接在设备的内部存储上保存文件。通过 默认情况下,保存到内部存储器的文件对您来说是私有的 应用程序和其他应用程序无法访问它们(也不能 用户)。当用户卸载您的应用程序时,这些文件是 除去。(reference)
如何创建公共文件?
因此,要在我的设备上创建一个可以使用文件管理器访问它的文件,我必须使用以下公共路径选项之一:externalDataDirectory
。以前,我以为它是用于存储我手机上没有的外部SD卡上的文件,所以我没有测试它。但是今天进行测试,它会在Android/data/<app-id>/files
路径中的内部设备存储上创建文件,这是公共的,我可以使用设备文件管理器访问它。
实际上,internal
和external
一词对我有误导性,而external storage
可以是可移动存储媒体(如SD卡)或内部(不可移动)存储( reference)。
答案 1 :(得分:0)
在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
添加为最后一个参数。