图书馆网站建设建议,合肥seo网站排名优化公司,建外卖网站,网站美工设计公司电话一.背景
需求是需要操作用户手机中的文件#xff0c;不是应用沙箱
二.解决方案
这里要注意的一点拿到fsOpen.path的路径再去进行open文件#xff0c;因为这里还不知道本地文件路径在哪里#xff0c;需要选择一下路径再拿到路径去请求
1.这里就是进行两个fs.open#xf…一.背景
需求是需要操作用户手机中的文件不是应用沙箱
二.解决方案
这里要注意的一点拿到fsOpen.path的路径再去进行open文件因为这里还不知道本地文件路径在哪里需要选择一下路径再拿到路径去请求
1.这里就是进行两个fs.open拿到你需要操作的文件的路径以后第一个就没用了,如果是需要新建文件也可以省去这步
const DocumentSelectOptions new picker.DocumentSelectOptions();let context getContext(this) as common.Context;// 创建文件选择器实例。const documentViewPicker new picker.DocumentViewPicker(context);documentViewPicker.select(DocumentSelectOptions).then(async (documentSelectResult) {// 获取选择路径let uri documentSelectResult[0];console.log(e2qdw,uri)// 若文件不存在则创建文件//const fsOpen await fs.open(uri,fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY |fs.OpenMode.CREATE)//console.log(fsOpen.path)const fsOpen await fs.open(这里的路径就是fsOpen.path,fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY |fs.OpenMode.CREATE)// 读取文件this.readFile(fsOpen)// 写入this.writeFile(fsOpen)}).catch((err:BusinessError) {console.error(Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message});})
2.第一步拿到以后就可以替换成这个代码 找到需要操作文件的路径DocumentSelectOptions文件选择器就没用了 async getFiles() {try {// 若文件不存在则创建文件// OpenMode.CREATE若文件不存在则创建文件。//OpenMode.TRUNC如果文件存在且文件具有写权限则将其长度裁剪为零。覆盖 不是追加const fsOpen await fs.open(/storage/Users/currentUser/Download/jrdl.json,fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY |fs.OpenMode.CREATE|fs.OpenMode.TRUNC)// // 读取文件this.readFile(fsOpen)// this.deleteFile(fsOpen)// 写入this.writeFile(fsOpen)} catch (e) {console.error(Invoke documentViewPicker.save failed, code is ${e.code}, message is ${e.message});}}
3.读写文件代码
readFile(fsOpen:fs.File){// 读取文件let arrayBuffer new ArrayBuffer(4096);fs.read(fsOpen.fd, arrayBuffer, (err: BusinessError, readLen: number) {if (err) {console.error(read failed with error message: err.message , error code: err.code);} else {console.info(read file data succeed);let buf buffer.from(arrayBuffer, 0, readLen);console.info(成功读取文件内容: ${buf.toString()});}// fs.closeSync(fsOpen);});}writeFile(fsOpen:fs.File){let str: string hello,word;fs.write(fsOpen.fd, str, (err: BusinessError, writeLen: number) {if (err) {console.error(write data to file failed with error message: err.message , error code: err.code);} else {promptAction.showToast({ message: 成功写入,duration:2000,alignment:Alignment.Center })console.info(成功写入大小为: writeLen);}fs.closeSync(fsOpen);});}
4.完整代码
封装成工具类了这里已经直接拿着就能用
import { BusinessError } from kit.BasicServicesKit;
import fs, { ReadOptions, WriteOptions } from ohos.file.fs; // 导入文件管理模块
import { buffer } from kit.ArkTS;
import { promptAction } from kit.ArkUI;
import { picker } from kit.CoreFileKit;
import { common } from kit.AbilityKit;//执行UDP通讯的对象
export class fileUtils {async getFiles() {try {// 若文件不存在则创建文件const fsOpen await fs.open(/storage/Users/currentUser/Download/jrdl.json,fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY |fs.OpenMode.CREATE|fs.OpenMode.TRUNC)// // 读取文件this.readFile(fsOpen)// this.deleteFile(fsOpen)// 写入this.writeFile(fsOpen)} catch (e) {console.error(Invoke documentViewPicker.save failed, code is ${e.code}, message is ${e.message});}}readFile(fsOpen:fs.File){// 读取文件let arrayBuffer new ArrayBuffer(4096);fs.read(fsOpen.fd, arrayBuffer, (err: BusinessError, readLen: number) {if (err) {console.error(read failed with error message: err.message , error code: err.code);} else {console.info(read file data succeed);let buf buffer.from(arrayBuffer, 0, readLen);console.info(成功读取文件内容: ${buf.toString()});}// fs.closeSync(fsOpen);});}writeFile(fsOpen:fs.File){let str: string hello,word;fs.write(fsOpen.fd, str, (err: BusinessError, writeLen: number) {if (err) {console.error(write data to file failed with error message: err.message , error code: err.code);} else {promptAction.showToast({ message: 成功写入,duration:2000,alignment:Alignment.Center })console.info(成功写入大小为: writeLen);}fs.closeSync(fsOpen);});}deleteFile(){fs.unlink(/storage/Users/currentUser/Download/jrdl.json).then(() {console.info(remove file succeed);}).catch((err: BusinessError) {console.error(remove file failed with error message: err.message , error code: err.code);});}
}5.调用 new fileUtils().getFiles()