uni-app使用5+文件操作写入失败“不允许读”的Bug(安卓)
程序员文章站
2022-03-08 17:25:00
...
出现这个问题可能有如下几种情况:
1,请求文件系统的类型错误
也就是5+提供了这个几个变量来获取文件位置
- PRIVATE_WWW: 应用私有资源目录常量
- PRIVATE_DOC: 应用私有文档目录常量
- PUBLIC_DOCUMENTS: 应用公共文档目录常量
- PUBLIC_DOWNLOADS: 应用公共下载目录常量
一般都是存储在PRIVATE
开头的位置,这里是安卓的应用内部存储,只有对应的应用才能访问。当我们需要写文件,就不能填PRIVATE_WWW
这个位置,这里会存到www
目录下面,也就是/storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/www
这个目录(不同的机型可能不同,差不多)这个位置是只读的,所以当你对这个位置的文件进行修改就会报不允许读的错误,如下:
plus.io.requestFileSystem(plus.io.PRIVATE_WWW, function (fs) {
fs.root.getFile("test.txt", { create: false }, function (fentry) {
fentry.createWriter(function (writer) {
writer.onwrite = function (e) {
console.log("写入成功")
};
writer.onerror = function (e) {
console.log("写入失败", e)
};
writer.write("hello world");
});
});
});
这里只需要改下PRIVATE_WWW
为PRIVATE_DOC
就搞定啦,PRIVATE_DOC
的位置为/storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc
(不同机子可能不同),这个位置是可以修改文件的。
2,目录名写错
如果你的文件系统是在PRIVATE_DOC
下的,但是还是报了不允许读的错误,很可能就是出现了下面这个问题,你是不是先创建目录后再在这个目录里面创建文件再执行写入操作,并且你创建目录的时候,目录名是不是以/
开头的,如下:
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function (fs) {
// 目录名以 / 开头
fs.root.getDirectory('/test', { create: true }, function (direntry) {
direntry.getFile('test.txt', { create: true }, function (fentry) {
fentry.createWriter(function (writer) {
writer.onwrite = function(e) {
console.log('写入成功')
};
writer.onerror = function(e) {
console.log('写入失败', e)
};
writer.write('hello world');
});
})
})
});
你会发现,这样写它创建的目录不在doc
目录下,而还是在www
目录下,不管你是不是设置为PRIVATE_DOC
;所以这个目录下的文件是只读的,你去修改的话就又会报同一个错误啦,此时,只需要把/test
改成test
就行啦(上面的例子)