注意: 操作harmonyOS的文件只能对app沙箱内的文件进行操作
牵扯到两个支持点: fs和content这两个API;
具体的操作方法看下图:
创建文件
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖// 增加文件
creatDir(){// 获取上下文let content = featureAbility.getContent();// content.getFilesDir().then(path=>{}) 获取app的可操作沙箱路径content.getFilesDir(path=>{// 定义要创建的文件let dirPath = path + '/testDir';fs.mkdir(dirPath, (err, res)=>{if(err) return console.log('文件创建失败', JSON.stringIfy(err));console.log('文件创建成功', JSON.stringIfy(res));})}).catch(err => {if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));})
}
读文件
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖readDir(){// 获取上下文let content = featureAbility.getContent();content.getFilesDir().then(path=>{let options = {// 是否递归向下查找文件 默认true(水平读取文件),recursion: false,// 查找文件的数量限制 (0, 代表查找全部文件)listNum: 0,// 文件过滤 后缀名、文件名、文件类型、文件大小filter: {// 后缀名// suffix: ['.png', '.txt'],// 文件名// displayName: ['xxx', 'xx', '...'],// 文件类型 text/plan, auto/mp3,..., mine匹配所有类型// mineType: ['mine'],// 文件大小 大于或等于当前数值 单位bit(b,kb,mb,gb,tb,pb)fileSizeOver: 1024,// 最后修改时间// lastModifiedAfter: new Date(2025, 1, 1).getTime(),// 是否排除media已有的文件// excludeMedia: false}}fs.listFile(path, options).then(fileName=>{console.log('文件读取成功', JSON.stringIfy(res));}).catch(err => {if(err) return console.log('文件读取失败', JSON.stringIfy(err));})}).catch(err => {if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));})
}
写文件
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖writeFile(){// 获取上下文let content = featureAbility.getContent();content.getFilesDir().then(path=>{// 写文件遵从先读后写的规则,只有读取成功才能写入,所以这儿是sync同步操作, 打开文件配置项涉及两项(需要打开的文件路径, 打开时的规则模式mode)// @params path: 文件路径// @params mode: fs.OpenMode.READ_WRITE/CREATE 规则模式/选项// mode 包含两种API: 1. READ_WRITE 文件存在读取并写入; 2.CREATE 文件不存在先创建在写入 let filePath = path. + '/test.txt'; // 指定文件let getFIle = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); // 打开文件// 写入方法 fs.write(file.fd, text, {offset, length, encoding});// @params file.fd: 代表打开的文件,标示符// @params text: 写入的内容,可以是字符串或者数据流buffer// @params option {offset:写入的偏移量, length: ‘写入长度’, encoding: “utf-8, 默认是utf-8”}fs.write(getFIle.fd, '这是我要写入的内容', {encoding: 'utf-8'}, (err, readLen)=>{if(err) return console.log('文件写入失败', JSON.stringIfy(err));console.log('文件写入成功','写入长度'+readLen);}).catch(err => {if(err) return console.log('文件写入失败'', JSON.stringIfy(err));})}).catch(err => {if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));})
}
读成功写入的文件内容
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖readFile(){// 获取上下文let content = featureAbility.getContent();content.getFilesDir().then(path=>{// 写文件遵从先读后写的规则,只有读取成功才能写入,所以这儿是sync同步操作, 打开文件配置项涉及两项(需要打开的文件路径, 打开时的规则模式mode)// @params path: 文件路径// @params mode: fs.OpenMode.READ_WRITE/CREATE 规则模式/选项// mode 包含两种API: 1. READ_WRITE 文件存在读取并写入; 2.CREATE 文件不存在先创建在写入 let filePath = path. + '/test.txt'; // 指定文件let getFIle = fs.openSync(filePath, fs.OpenMode.READ_WRITE); // 打开文件// 写入方法 fs.read(file.fd, text, {offset, length, encoding});// @params file.fd: 代表打开的文件,标示符let buf = new ArrayBuffer('写入的内容');let con = fs.read(file.fd, buf, (err, readLen) => {console.log('zhaowb 读取成功:'+readLen)// 1. 获取到成功写入的长度,截取buffer部分内容// buf.slice(0, readLen)// 2. 将获取到的buffer内容转化为无序的8位的二进制数组(给chartCode提供数据源)// new Uint8Array(buf.slice(0, readLen))// 3. 转换成字符串,需要调用String上方法,通过String支持的fromCharCode, String.fromCharCode 支持单个编码转化,数组需结合apply或bind// String.fromCharCode(new Uint8Array(buf.slice(0, readLen)))// 4. 终极转化,完成最终的code编码转字符串, 数组的转化得调用// String.fromCharCode.apply(null, String.fromCharCode(new Uint8Array(buf.slice(0, readLen))));})catch(err => {if(err) return console.log('文件写入失败'', JSON.stringIfy(err));})}).catch(err => {if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));})
}