HarmonyOS鸿蒙系统上File文件常用操作

server/2024/11/25 3:16:54/

HarmonyOS鸿蒙系统上,file文件常用操作记录

1.创建文件
 createFile(fileName: string, content: string): string {// 获取应用文件路径let context = getContext(this) as common.UIAbilityContext;let filesDirPath = context.filesDir + '/' + fileName;// 新建并打开文件let file = fs.openSync(filesDirPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);// 写入一段内容至文件let writeLen = fs.writeSync(file.fd, content);// 从文件读取一段内容let buf = new ArrayBuffer(1024);let readLen = fs.readSync(file.fd, buf, { offset: 0 });// 关闭文件fs.closeSync(file);return filesDirPath}
2.将沙箱文件移动到分布式文件夹
 /*** 创建分布式文件*/async createDistributedFile(uri: string) {// 获取应用文件路径let context = getContext(this) as common.UIAbilityContext;let filesDir = context.distributedFilesDir;let fileName = this.getFileName(uri)try {let destUriPath = filesDir + '/' + fileNamethis.tempFilePath = fileName//给新建的文件写入内容// mMediaFileUtils.writeFileContent(destUriPath,content)// 新建并打开文件let writeFile = fs.openSync(destUriPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);//设置文件权限securityLabel.setSecurityLabel(destUriPath, 's1').then(() => {})// fs.write(file.fd,content)//读取原文件内容// 读取图片为bufferconst file = fs.openSync(uri, fs.OpenMode.READ_ONLY);let photoSize = fs.statSync(file.fd).size;let buffer = new ArrayBuffer(photoSize);fs.readSync(file.fd, buffer);fs.closeSync(file);//开始写入内容let writeLen = fs.write(writeFile.fd, buffer)} catch (error) {}}
3.读取分布式文件
  /*** 读取分布式文件* @param filePath*/readDistributedFile(filePath: string) {let context = getContext(this) as common.UIAbilityContext;let distributedFilesDir = context.distributedFilesDir;let distributedFilesDirs = fs.listFileSync(distributedFilesDir);for (let i = 0; i < distributedFilesDirs.length; i++) {let fileName = distributedFilesDir + '/' + distributedFilesDirs[i]this.readFile(fileName)}}
4.读取文件内容
  /*** 读取文件* @param filePath 文件路径*/readFile(filePath: string) {try {// 打开分布式目录下的文件let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);// 定义接收读取数据的缓存let arrayBuffer = new ArrayBuffer(4096);// 读取文件的内容,返回值是读取到的字节个数class Option {public offset: number = 0;public length: number = 0;}let option = new Option();option.length = arrayBuffer.byteLength;let num = fs.readSync(file.fd, arrayBuffer, option);// 打印读取到的文件数据let buf = buffer.from(arrayBuffer, 0, num);Log.info('读取的文件内容: ' + buf.toString());} catch (error) {let err: BusinessError = error as BusinessError;Log.error(`Failed to openSync / readSync. Code: ${err.code}, message: ${err.message}`);}}
5.产看文件列表(沙箱和分布式文件夹)
  /*** 查看文件列表 沙箱文件夹 和 分布式文件夹*/lookFilesList(): string {//沙箱文件夹let allFiles = ''let context = getContext(this) as common.UIAbilityContext;let filesDir = context.filesDir;let files = fs.listFileSync(filesDir);for (let i = 0; i < files.length; i++) {Log.info(`当前设备文件 name: ${files[i]}`);}//分布式文件夹let distributedFilesDir = context.distributedFilesDir;Log.info('context.distributedFilesDir: ' + distributedFilesDir)let distributedFilesDirs = fs.listFileSync(distributedFilesDir);if (distributedFilesDirs.length > 0) {for (let i = 0; i < distributedFilesDirs.length; i++) {Log.info(`分布式文件 name: ${distributedFilesDirs[i]}`);}}return allFiles;}
6.删除分布式下指定文件
  /*** 删除分布式指定文件*/deleteDistributedFile(fileName: string) {let context = getContext(this) as common.UIAbilityContext;let filePath = context.distributedFilesDir + '/' + fileNamesecurityLabel.setSecurityLabel(filePath, 's1').then(() => {Log.info('Succeeded in setSecurityLabeling.');})try {fs.rmdir(filePath)Log.info('刪除文件成功')} catch (error) {let err: BusinessError = error as BusinessError;Log.error(`Failed to openSync / readSync. Code: ${err.code}, message: ${err.message}`);}}
7. 删除本地文件
  /*** 删除本地文件*/deleteCurrentDeviceFile() {let context = getContext(this) as common.UIAbilityContext;let filesDir = context.filesDir;let filesDirs = fs.listFileSync(filesDir);if (filesDirs.length <= 0) {return}let fileName = filesDirs + '/' + filesDirs[0]securityLabel.setSecurityLabel(fileName, 's1').then(() => {Log.info('Succeeded in setSecurityLabeling.');})try {fs.rmdir(fileName)Log.info('刪除文件成功')} catch (error) {let err: BusinessError = error as BusinessError;Log.error(`Failed to openSync / readSync. Code: ${err.code}, message: ${err.message}`);}}
8.获取文件名
  /*** 获取文件名* @param filePath* @returns*/getFileName(filePath: string): string {const parts = filePath.split('/');if (parts.length === 0) {return '';} // 如果没有找到任何斜杠,返回nullconst fileNameWithExtension = parts[parts.length - 1];const fileNameParts = fileNameWithExtension.split('.');if (fileNameParts.length < 2) {return fileNameWithExtension;} // 如果没有扩展名,直接返回文件名// return fileNameParts[0]; // 返回文件名(不含扩展名)return fileNameWithExtension; // 返回文件名,含扩展名}
9.保存文件到本地文件夹
 /*** 拉起picker保存文件*/async saveFile(fileName: string):Promise<string>{let saveFileUri = ''try {let DocumentSaveOptions = new picker.DocumentSaveOptions();DocumentSaveOptions.newFileNames = [fileName];let documentPicker = new picker.DocumentViewPicker();await documentPicker.save(DocumentSaveOptions).then( (DocumentSaveResult) => {if (DocumentSaveResult !== null && DocumentSaveResult !== undefined) {let uri = DocumentSaveResult[0] as string;this.realFileUri = urithis.realSaveFile(fileName)saveFileUri = uri}}).catch((err: BusinessError) => {Log.error('saveFile-DocumentViewPicker.save failed with err: ' + JSON.stringify(err));});} catch (err) {Log.error('saveFile-DocumentViewPicker failed with err: ' + err);}return saveFileUri}realFileUri: string = ''/*** 真正开始保存文件*/async realSaveFile(fileName: string) {let context = getContext(this) as common.UIAbilityContext;let pathDir = context.distributedFilesDir;// 获取分布式目录的文件路径let filePath = pathDir + '/' + fileName;// 读取bufferconst file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);let photoSize = fs.statSync(file.fd).size;let buffer = new ArrayBuffer(photoSize);fs.readSync(file.fd, buffer);fs.closeSync(file);let saveFile = fs.openSync(this.realFileUri, fs.OpenMode.WRITE_ONLY);let writeLen = fs.write(saveFile.fd, buffer)Log.info(`save file uri success ~~~~~` + writeLen);//保存成功以后删除分布式上面的文件this.deleteDistributedFile(filePath)}

在这里插入图片描述


http://www.ppmy.cn/server/144692.html

相关文章

【机器学习chp5】线性回归

推荐文章1&#xff0c;三种角度详细分析了L1&#xff0c;L2正则化的本质。 【王木头 L1、L2正则化】三个角度理解L1、L2正则化的本质-CSDN博客 推荐文章2&#xff0c;其中有各种梯度下降的优化算法分析。 【王木头梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、…

国外云计算服务器租用攻略

国外云计算服务器租用需综合考虑服务商信誉、性能配置、价格性价比、合规性与法律风险、技术支持等因素。首先明确业务需求&#xff0c;选择正规、技术实力强的服务商&#xff0c;并考虑地理位置以优化访问速度。其次&#xff0c;根据需求选择合适的CPU、内存、存储和带宽配置&…

tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), PORT)); 解析

这行代码使用 boost::asio 库创建了一个 TCP 服务器端的 acceptor 对象&#xff0c;用于监听指定端口的传入连接请求。它是一个在服务器端监听客户端连接的基础组件。让我们逐部分解释这行代码&#xff1a; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), PORT…

Python-flet实现个人视频播放器

1&#xff1a;效果图 2&#xff1a;代码 登录后复制 import random import flet as ftdef main(page: ft.Page):page.theme_mode ft.ThemeMode.LIGHTpage.title "岁月里客栈视频播放器"page.window.always_on_top Truepage.spacing 20page.horizontal_alignment …

HTML通过JavaScript获取访问连接,IP和端口

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Get IP Address</title> <script> function displayURL() { var url window.location.href; // 获取当…

Jmeter进阶篇(27)压测时如何计算最合适的并发量

Jmeter性能测试大全:Jmeter性能测试大全系列教程❤,如果觉得我讲的还不错,欢迎订阅哦~ 📚如何确定 JMeter 压测中的并发量 在进行性能测试时,确定合适的并发量是非常非常重要的一步。并发量决定了模拟用户的数量,她会直接影响到测试结果的有效性和可靠性。 在实际做性…

R语言基础| 聚类分析

定义和分类 聚类分析&#xff1a;一种数据归约技术&#xff0c;揭示一个数据集中观测值的子集。我们在机器学习中也详细介绍过聚类相关的知识&#xff1a;机器学习基础手册。 聚类簇(cluster)&#xff1a;若干个观测值组成的群组&#xff0c;群组内观测值的相似度比群间相似度…

功耗中蓝牙扫描事件插桩埋点

手机功耗中蓝牙扫描事件插桩埋点 功耗主要监控蓝牙扫描的时间和次数&#xff0c;进而换算为频次监控。其中不同的蓝牙扫描模式带来的功耗影响也是不一样的。 即功耗影响度低延迟扫描>平衡模式扫描>低功耗模式。例如某款机型分别为&#xff1a;低延迟扫描 14.64mA,平衡模…