实现的主要功能是 通过log写入本地 将日志上传到服务器 这个功能
我还是要吐槽一下 鸿蒙的api 对开发者贼不友好。不同版本的api的差异真的有点大
目前的鸿蒙在开发资料也不多,不像android那样,随处都有。全靠官方提供的开发文档
由于鸿蒙3.1(api9)版本 还处于beta阶段 对测试机也只有高端机两部手机可以用
项目直接切到api8(主要是穷)
1.获取app的 cache路径
华为手机管理文件 我是看不到这个文件,估计是权限问题,这里是用了 androidstudio 编辑器 来看(后面调试可以观察到文本数据的变化--test.txt)
相关代码块
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条整,没有问题