美文网首页鸿蒙
关于鸿蒙的文件读写讲解--崩溃边缘挣扎

关于鸿蒙的文件读写讲解--崩溃边缘挣扎

作者: 林下人水边兵 | 来源:发表于2023-03-24 13:35 被阅读0次

    实现的主要功能是 通过log写入本地 将日志上传到服务器 这个功能

    我还是要吐槽一下 鸿蒙的api 对开发者贼不友好。不同版本的api的差异真的有点大

    目前的鸿蒙在开发资料也不多,不像android那样,随处都有。全靠官方提供的开发文档

    由于鸿蒙3.1(api9)版本 还处于beta阶段 对测试机也只有高端机两部手机可以用
    项目直接切到api8(主要是穷)

    1.获取app的 cache路径

    华为手机管理文件 我是看不到这个文件,估计是权限问题,这里是用了 androidstudio 编辑器 来看(后面调试可以观察到文本数据的变化--test.txt)

    image.png
    image.png

    相关代码块

    async function writeLogToFile(log) {
      var context = featureAbility.getContext();
      context.getCacheDir((err, data) => {
        console.info("getCacheDir err: " + JSON.stringify(err) + "data: " + JSON.stringify(data));
        let path = data + "/test.txt"
        //文件操作
        write(log, path)
      });
    }
    

    2.对文件进行读写

    这里由于不同版本提供的api差异区别,看文档需要注意。目前我是以鸿蒙3.0(api8)的来写,这里也是最痛苦的,有的api也不维护了,大家自己感受

    看了开发文档,提供的FileIO的操作还是很多,需要根据自己业务需求使用适当api. 这里我是使用了它提供的 fileio.createStream7+ 来实现,这里不展开了,具体看文档

    参考文档地址

    相关代码块

    async function write(log, path) {
      await fileio.createStream(path, "a+").then(function (stream) {
        console.info("createStream succeed");
        stream.writeSync(log + "\n")
        stream.flushSync()
        stream.close()
      }).catch(function (err) {
        console.info("createStream failed with error:" + err);
      });
    }
    

    3.完整代码如下

    import fileio from '@ohos.fileio';
    import hilog from '@ohos.hilog';
    import prompt from '@ohos.prompt';
    import featureAbility from '@ohos.ability.featureAbility';
    import app from '@system.app';
    import writeFileSync from '@system.file';
    
    @Entry
    @Component
    struct Index {
      @State message: string = 'Hello World'
    
      build() {
        Row() {
          Column() {
            Button(this.message)
              .fontSize(50)
              .onClick(() => {
                for (let index = 0; index < 1000; index++) {
                  writeLogToFile("test" + index)
                  if (index == 999) {
                    prompt.showToast({ message: "结束" })
                  }
    
                }
    
              })
          }
          .width('100%')
        }
        .height('100%')
      }
    }
    
    async function writeLogToFile(log) {
      var context = featureAbility.getContext();
      context.getCacheDir((err, data) => {
        console.info("getCacheDir err: " + JSON.stringify(err) + "data: " + JSON.stringify(data));
        let path = data + "/test.txt"
        //文件操作
        write(log, path)
      });
    }
    
    async function write(log, path) {
      await fileio.createStream(path, "a+").then(function (stream) {
        console.info("createStream succeed");
        stream.writeSync(log + "\n")
        stream.flushSync()
        stream.close()
      }).catch(function (err) {
        console.info("createStream failed with error:" + err);
      });
    }
    
    

    运行后的效果

    多次测试,异步写入 每次数据都是1000条整,没有问题


    image.png

    相关文章

      网友评论

        本文标题:关于鸿蒙的文件读写讲解--崩溃边缘挣扎

        本文链接:https://www.haomeiwen.com/subject/eonwrdtx.html