欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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_WWWPRIVATE_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就行啦(上面的例子)

5+文件操作文档

相关标签: 一些坑