HarmonyOS鸿蒙Next中实现多个文件操作示例代码

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS鸿蒙Next中实现多个文件操作示例代码 介绍
本demo按照文件上传、文件下载、文件预览、文件读取保存、文件压缩解压、文件拷贝6个分类进行场景化子demo构造展示,如文件上传展示中,模拟简易聊天场景,此时发送文件是个正常诉求,基于此场景完成相关元能力实现及展示。
entry包仅提供页面展示,各文件操作分类对应的har包提供元能力的函数导出。读者无需关注页面样式相关,评估场景及对应har包能力是否需要即可。
实现多个文件操作功能源码地址

使用说明

1.文件预览

1.1.场景介绍:

场景1:通过previewKit预览下载文件,其中预览能力来自file_preview的har包中viewFileByPreviewKit函数,下载能力来自file_download中的downLoadFileByRequest函数
场景2:通过webview组件预览本地rawfile文件以及网络地址,详情代码参考PreviewByWebview.ets

1.2.效果预览:

2.文件下载

2.1.场景介绍:

完成下载配置,包含下载源url,保存路径,保存文件名等,通过request.agent.create创建下载实例对象,该对象来控制下载任务的暂停重启,后台下载等,具体实现代码参考FileDownloadPage.ets

2.2.效果预览:

3.文件读取与保存

3.1.场景介绍:

模拟即时通讯软件聊天界面,发送图片或者表情包的场景,保存聊天记录的场景,相关元能力来自photoPickerGetUri,saveToUser函数,具体代码参考file_read_write的har包common目录下的utils文件夹。

3.2.效果预览:

4.文件上传

4.1.前置准备:

已有demo中关于文档上传的部分,上传的服务器地址都是模拟的,未将全流程跑通,本demo示例有简单实现一个node服务器处理,将根目录下uploadServer文件夹拷贝出其他目录,进入uploadServer,按照其中的readme文档将服务启动。需要提前demo目录下的uploadConstant中的ip地址填入本机ip:

4.2.场景介绍

4.2.1. 场景1:通过webview加载h5,模拟云盘上传文件进行缓存的场景,通过监听打开文件选择事件,拉起手机文件管理,通过h5自带form表单进行上传。如图所示:
4.2.2. 场景2:模拟复合表单提交

效果预览:

5.文件解压、压缩

5.1.前置准备:

由于生态代码仓会拦截zip文件,这里需要准备一个压缩文件,放入entry包下资源目录下的rawfile文件中,命名:decompress_file_test.zip
如图:参考README文件

5.2.实现说明:

5.2.1. 使用了内置库zlib的压缩、解压能力,详细代码参考:CompressFileView.etsDeCompressFileView.ets
5.2.2. 解压时使用了worker开启子线程加速解压,详情代码参考:file_compress的har包下的worker.ets

效果预览:

6.文件拷贝

6.1.场景说明:

展示沙箱目录下rawfile文件列表,点击后拉起文件管理选择目录后进行拷贝,拷贝能力由file_copy har包中的copyRawFileToPub函数提供。

6.2.效果预览:


更多关于HarmonyOS鸿蒙Next中实现多个文件操作示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,实现多个文件操作的示例代码如下:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

// 创建文件
function createFile(filePath: string): void {
    try {
        fs.createFileSync(filePath);
        console.log(`文件创建成功: ${filePath}`);
    } catch (error) {
        console.error(`文件创建失败: ${(error as BusinessError).message}`);
    }
}

// 写入文件
function writeFile(filePath: string, content: string): void {
    try {
        fs.writeTextSync(filePath, content);
        console.log(`文件写入成功: ${filePath}`);
    } catch (error) {
        console.error(`文件写入失败: ${(error as BusinessError).message}`);
    }
}

// 读取文件
function readFile(filePath: string): string | null {
    try {
        const content = fs.readTextSync(filePath);
        console.log(`文件读取成功: ${filePath}`);
        return content;
    } catch (error) {
        console.error(`文件读取失败: ${(error as BusinessError).message}`);
        return null;
    }
}

// 删除文件
function deleteFile(filePath: string): void {
    try {
        fs.unlinkSync(filePath);
        console.log(`文件删除成功: ${filePath}`);
    } catch (error) {
        console.error(`文件删除失败: ${(error as BusinessError).message}`);
    }
}

// 示例使用
const filePath = 'example.txt';
createFile(filePath);
writeFile(filePath, 'Hello, HarmonyOS!');
const content = readFile(filePath);
console.log(`文件内容: ${content}`);
deleteFile(filePath);

该代码示例展示了如何在HarmonyOS鸿蒙Next中创建、写入、读取和删除文件。代码使用了@ohos.file.fs模块提供的文件系统API。

更多关于HarmonyOS鸿蒙Next中实现多个文件操作示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以通过File类实现多个文件操作。以下是一个示例代码,展示如何创建、读取和删除文件:

import ohos.app.Context;
import ohos.global.resource.ResourceManager;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.file.File;
import ohos.media.file.FileInputStream;
import ohos.media.file.FileOutputStream;
import ohos.utils.PacMap;

public class FileOperations {
    private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "FileOperations");

    public void createFile(Context context, String fileName, String content) {
        try {
            File file = new File(context.getFilesDir(), fileName);
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(content.getBytes());
            fos.close();
            HiLog.info(LABEL, "File created successfully.");
        } catch (Exception e) {
            HiLog.error(LABEL, "Failed to create file: " + e.getMessage());
        }
    }

    public String readFile(Context context, String fileName) {
        StringBuilder content = new StringBuilder();
        try {
            File file = new File(context.getFilesDir(), fileName);
            FileInputStream fis = new FileInputStream(file);
            int ch;
            while ((ch = fis.read()) != -1) {
                content.append((char) ch);
            }
            fis.close();
            HiLog.info(LABEL, "File read successfully.");
        } catch (Exception e) {
            HiLog.error(LABEL, "Failed to read file: " + e.getMessage());
        }
        return content.toString();
    }

    public void deleteFile(Context context, String fileName) {
        try {
            File file = new File(context.getFilesDir(), fileName);
            if (file.delete()) {
                HiLog.info(LABEL, "File deleted successfully.");
            } else {
                HiLog.error(LABEL, "Failed to delete file.");
            }
        } catch (Exception e) {
            HiLog.error(LABEL, "Failed to delete file: " + e.getMessage());
        }
    }
}

该代码展示了如何创建、读取和删除文件,使用HiLog记录操作日志。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!