鸿蒙开发-文件与分享

embedded/2024/11/24 6:42:20/

文件分类

按所有者:

  • 应用文件:所有者为应用,包括应用安装文件、应用资源文件、应用缓存文件等。

  • 用户文件:所有者是登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。

  • 系统文件:与应用和用户无关的其他文件,包括公共库、设备文件、系统资源文件等。

应用沙箱(虚拟目录,仅应用自己可见)

在这里插入图片描述

应用文件路径详细

在这里插入图片描述
在这里插入图片描述

写文件

//WriteFile.ets
import { fileIo } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';let context = getContext(this) as common.UIAbilityContext
let filesDir = context.filesDir;/*** 写文件* 把内容写入一个文件* @param content 内容字符串*/
export function writeFile(content: string): void {let filePath = filesDir + '/test.txt' //文件路径// 用文件路径,创建一个文件流。w+: 覆盖式读写,无论该文件存在与否let fileStream = fileIo.createStreamSync(filePath, "w+");fileStream.writeSync(content);fileStream.close();
}

在这里插入图片描述

读文件

//ReadFile.ets
import { fileIo } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import { buffer } from '@kit.ArkTS';// 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let filesDir = context.filesDir;
let res: string = '';export function readFile(): string {//文件路径let filePath = filesDir + '/test.txt'//获取文件状态let stat = fileIo.statSync(filePath)let size = stat.size //文件大小//设置一个读取缓冲区,大小与文件大小一致let buf = new ArrayBuffer(size)// 根据文件路径打开文件流let fileStream = fileIo.createStreamSync(filePath, "r+")// 读取信息到缓冲区,同步方法(sync)fileStream.readSync(buf)// 文件读取到缓冲区后,再转换为通用buffer类型(二进制)let con = buffer.from(buf, 0)//buffer二进制数据,转换为字符串类型res = con.toString()//关闭文件流fileStream.close()return res;
}

文件分享

应用场景:应用A主动分享文件给应用B,应用B完成文件接收。

在这里插入图片描述

  • URI分享: 把文件在沙箱中的路径,转换成实际的物理路径(URI),即可分享。

文件分享: systemShare

//ShareFile.ets
import {  Want, wantConstant } from '@kit.AbilityKit';
import { common } from '@kit.AbilityKit';
import { fileUri } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { uniformTypeDescriptor } from '@kit.ArkData';
import { systemShare } from '@kit.ShareKit';let context = getContext(this) as common.UIAbilityContext;
let filesDir = context.filesDir;export
function shareFile2(){// 获取文件的沙箱路径let filePath = filesDir + '/test.txt'// 将沙箱路径转换为urilet uri1 = fileUri.getUriFromPath(filePath)let utd1 = ''if (canIUse('SystemCapability.DistributedDataManager.UDMF.Core')) {utd1 = uniformTypeDescriptor.UniformDataType.PLAIN_TEXT}let data = new systemShare.SharedData({utd: utd1,uri: uri1})let ctrl = new systemShare.ShareController(data)ctrl.show(context,{// 选用一种预览previewMode: systemShare.SharePreviewMode.DETAIL,// 选用一种选择模式, 例如单选selectionMode: systemShare.SelectionMode.SINGLE})
}export default
function shareFile(){// 获取文件的沙箱路径let filePath = filesDir + '/test.txt'// 将沙箱路径转换为urilet uri = fileUri.getUriFromPath(filePath)let want: Want  = {// 配置被分享文件的读写权限,例如对被分享应用进行读写授权flags: wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION |wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION,// 配置分享应用的隐式拉起规则action: 'ohos.want.action.sendData',uri: uri,type: 'text/plain'}context.startAbility(want).then(() => {promptAction.showToast({message: '分享成功'})}).catch((err: BusinessError) => {promptAction.showToast({message: `分享失败:${err.code}, 原因:${err.message}`,duration: 5000})});
}

在这里插入图片描述

文件选择器 - Picker

  • PhotoViewPicker:图片/视频
  • DocumentViewPicker:各式文件
  • AudioViewPicker:音频
import { picker } from '@kit.CoreFileKit';
let photoPicker = new picker.PhotoViewPicker()
let docPicker = new picker.DocumentViewPicker()
let audioPicker = new picker.AudioViewPicker()
import fileIo from "@ohos:file.fs";
import picker from "@ohos:file.picker";
import type common from "@ohos:app.ability.common";
let context = getContext(this) as common.UIAbilityContext;
export async function photoPickerGetUri(): Promise<string> {//picker的选项配置let PhotoSelectOptions = new picker.PhotoSelectOptions();PhotoSelectOptions.maxSelectNumber = 1; //最大可选数let photoPicker = new picker.PhotoViewPicker();try {let result = await photoPicker.select(PhotoSelectOptions);console.info('选择结果 uri: ' + JSON.stringify(result));let photosUris = result.photoUris;return Promise.resolve(photosUris[0].toString());}catch (e) {console.error('出错: ' + JSON.stringify(e));}return Promise.reject();
}
export async function photoSave() {let options = new picker.PhotoSaveOptions;options.newFileNames = ['1.jpg']; //保存文件名let picker1 = new picker.PhotoViewPicker();try {let result = await picker1.save(options);let file = await fileIo.open(result[0], fileIo.OpenMode.READ_WRITE);let buffer = context.resourceManager.getMediaContentSync({ "id": 16777238, "type": 20000, params: [], "bundleName": "com.example.filesmanger", "moduleName": "entry" }.id);await fileIo.write(file.fd, buffer.buffer);}catch (e) {console.error('保存失败:' + JSON.stringify(e));}
}

Picker保存文件

import { picker, fileIo } from '@kit.CoreFileKit';
import { buffer } from '@kit.ArkTS';export async function saveToUser(content: string) {try {let options = new picker.DocumentSaveOptions()options.newFileNames = ['test123.txt']let picker1 = new picker.DocumentViewPicker()let result = await picker1.save(options)//打开文件,读写模式let file = fileIo.openSync(result[0], fileIo.OpenMode.READ_WRITE)fileIo.writeSync(file.fd, content) //写入内容console.info('保存成功, uri: ' + JSON.stringify(result))} catch (error) {console.error('保存错误:' + JSON.stringify(error));}
}export async function readUserFile(): Promise<string> {try {let options = new picker.DocumentSelectOptions()let documentPicker = new picker.DocumentViewPicker()let result = await documentPicker.select(options)let file = fileIo.openSync(result[0], fileIo.OpenMode.READ_WRITE)let buf = new ArrayBuffer(fileIo.statSync(file.fd).size)fileIo.readSync(file.fd, buf)let con = buffer.from(buf, 0)return Promise.resolve(con.toString())} catch (err) {console.error('读取失败: ' + JSON.stringify(err));}return Promise.reject()
}

http://www.ppmy.cn/embedded/140052.html

相关文章

【C++】第九节:list

1、list的介绍及使用 1.1 list的介绍 list - C 参考 1.2 list的使用 1.2.1 list的构造 void TestList1() {list<int> l1; // 构造空的l1list<int> l2(4, 100); // l2中包含4个值为100的元素list<int> l3(l2.begin(), l2.end()); // 用l2的[begin(),end())…

HAProxy面试题及参考答案(精选80道面试题)

目录 什么是 HAProxy? HAProxy 主要有哪些功能? HAProxy 的关键特性有哪些? HAProxy 的主要功能是什么? HAProxy 的作用是什么? 解释 HAProxy 在网络架构中的作用。 HAProxy 与负载均衡器之间的关系是什么? HAProxy 是如何实现负载均衡的? 阐述 HAProxy 的四层…

「Chromeg谷歌浏览器/Edge浏览器」篡改猴Tempermongkey插件的安装与使用

1. 谷歌浏览器安装及使用流程 1.1 准备篡改猴扩展程序包。 因为谷歌浏览器的扩展商城打不开&#xff0c;所以需要准备一个篡改猴压缩包。 其他浏览器只需打开扩展商城搜索篡改猴即可。 没有压缩包的可以进我主页下载。 也可直接点击下载&#xff1a;Chrome浏览器篡改猴(油猴…

【c++丨STL】list模拟实现(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、节点、迭代器以及函数声明 二、list功能实现 1. 节点 2. 迭代器 迭代器的默认构造 operator* operator-> 前置和-- 后置和--…

【华为云函数工作流】python的函数中如何获取请求链接中带的参数

背景 通过调用函数的url&#xff0c;将参数传递给函数执行&#xff0c;函数里如何获取这个参数 过程 下一个简单的demo如下 参考这个链接https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html写一个demo&#xff0c;这个是百度视频云获取token的…

【MySQL】mysql常用不常用法(持续更新)

注意&#xff1a;对数据做操作时做好备份 1、查询mysql数据表中某字段有重复的数据 适用场景&#xff0c;如&#xff1a; 用户表同名的有那些人&#xff0c;那些名称是重复出现的 SQL语法&#xff1a; SELECT t.*, COUNT(*) AS x_count FROM [table_name] t GROUP BY [检查…

vue2 src_Todolist编辑($nextTick)

main.js //引入Vue import Vue from "vue"; //引入App import App from ./App;//关闭Vue的生产提示 Vue.config.productionTip false;new Vue({el: #app,render: h > h(App),beforeCreate() {//事件总线Vue.prototype.$bus this;} });App.vue <template>…

Sickos1.1 详细靶机思路 实操笔记

Sickos1.1 详细靶机思路 实操笔记 免责声明 本博客提供的所有信息仅供学习和研究目的&#xff0c;旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动&#xff0c;您将独自承担…