HarmonyOS 鸿蒙Next Deveco Studio实现文件管理

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

HarmonyOS 鸿蒙Next Deveco Studio实现文件管理 课设要做一个课表,本来想用文件来存储课程信息,然后显示到软件上的。可是并不能指定可见目录的文件夹,所以文件管理只能轻量化的存储数据,不能实现我的需求,但是为此折腾了很久,看网上也没有相关讲清楚的教程,大家有需要的可以试着照我的方法试一下。

首先找到:EntryAbility.ts

然后参考官方文档里的开发示例:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-file-fileuri-0000001554938421-V2

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage) {
    let context = this.context;
    let pathDir = context.filesDir;
  }
}

我们打卡的ts文件就是用来编写EntryAbility的,我们要做的就是找到onWindowStageCreate(windowStage)这个函数,将这些语句加进去用来获取pathDir:

let context = this.context;
let pathDir = context.filesDir;

然后我们添加一下日志显示语句来便于查看,console每次日志都太多了,所以我用的是以下方法,大家可以用自己喜欢的:

hilog.info(0x0000, 'testTag', '%{public}s', "任何你想用来提示的语句" + 任意合法变量)

日志查看方式:

找到日志栏,搜索框那边填testTag(只填test也差不多)

之后我们在增加创建文件的语句(在其他创建会显示权限不够)

fs.open(Filepath, fs.OpenMode.CREATE).then(file => {
  console.info("file fd: " + file.fd);
  hilog.info(0x0000, 'testTag', '%{public}s', "fife succeed:" + file.fd)
}).catch(err => {
  console.error("open file failed with error message: " + err.message + ", error code: " + err.code);
  hilog.info(0x0000, 'testTag', '%{public}s', "open file failed with error message: " + err.message + ", error code: " + err.code)
});

大家应该能看出来我把显示语句换成了以上的方法,大家还是可以依旧选择自己习惯的方法。

我的示例:

onWindowStageCreate(windowStage: window.WindowStage) {
  // Main window is created, set main page for this ability
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

  windowStage.loadContent('pages/Index', (err, data) => {
    if (err.code) {
      hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
      return;
    }
    hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
  }); //以上都是原来有的,下面的都是我新加上去的

  let context = this.context;
  let pathDir = context.filesDir;
  hilog.info(0x0000, 'testTag', '%{public}s', "i am entryability:" + pathDir); //显示dir
  let Filepath = pathDir + "/111.txt";
  hilog.info(0x0000, 'testTag', '%{public}s', Filepath) //断点
  fs.open(Filepath, fs.OpenMode.CREATE).then(file => { //创建文件
    console.info("file fd: " + file.fd);
    hilog.info(0x0000, 'testTag', '%{public}s', "fife succeed:" + file.fd)
  }).catch(err => {
    console.error("open file failed with error message: " + err.message + ", error code: " + err.code);
    hilog.info(0x0000, 'testTag', '%{public}s', "open file failed with error message: " + err.message + ", error code: " + err.code)
  });
}

执行到这里日志栏大致如下:

创建文件成功,我们就可以在ets代码中进行文件管理了,参考文章链接:https://developer.huawei.com/consumer/cn/forum/topic/0201773705241480173?fid=0102683795438680754

代码示例如下,注意里面111.txt的dir地址,我是从前面的日志栏显示中直接复制过来的,按理来说应该用什么办法传过来,但是我没有这么做:

import fileio from '@ohos.fileio';
import fs from '@ohos.file.fs';
import fileuri from "@ohos.file.fileuri";
import ability_featureAbility from '@ohos.ability.featureAbility';
import hilog from '@ohos.hilog';
import { UIAbility } from '@ohos.app.ability.UIAbility';
import featureAbility from '@ohos.ability.featureAbility';
import { WindowMode } from '@ohos.UiTest';
import picker from '@ohos.file.picker';

@Entry
@Component
struct NewmyFileTwo {
  @State path: string = "";

  private writeFiles(){
    let fd = fileio.openSync("/data/storage/el2/base/haps/entry/files/111.txt", 0o102, 0o666);
    fileio.write(fd, "你好 2022", function(err, bytesWritten) {
      if (!err) {
        console.log("写入成功")
        hilog.info(0x0000, 'testTag', '%{public}s', "写入成功")
      }
    });

  }

  private ReadFile(){
    let Filepath = "/data/storage/el2/base/haps/entry/files/111.txt";
    hilog.info(0x0000, 'testTag', '%{public}s', Filepath) //断点
    fs.stat(Filepath).then(stat => {
      console.info("get file info succeed, the size of file is " + stat.size);
      hilog.info(0x0000, 'testTag', '%{public}s', "stat succeed:" + stat.size)
    }).catch(err => {
      console.error("get file info failed with error message: " + err.message + ", error code: " + err.code);
      hilog.info(0x0000, 'testTag', '%{public}s', "stat failed with error:" + err) //断点
    });

    fileio.readText(Filepath).then(function(str) {
      console.info("readText succeed:" + str);
      hilog.info(0x0000, 'testTag', '%{public}s', "readText succeed:" + str)
    }).catch(function(err){
      console.info("readText failed with error:" + err);
      hilog.info(0x0000, 'testTag', '%{public}s', "readText failed with error:" + err) //断点
    });
  }

  build() {
    Flex({
      direction: FlexDirection.Column,
      alignItems: ItemAlign.Center,
      justifyContent: FlexAlign.Center
    }) {
      Text('写文件 你好 2022 到文件中')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .backgroundColor(Color.Red)
        .onClick(this.writeFiles.bind(this));

      Text('读文件内容')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .backgroundColor(Color.White)
        .onClick(this.ReadFile.bind(this));
    }
    .width('100%')
    .height('100%')
  }
}

实现界面如下:

然后日志栏如下,第一次读文件为空,写入数据你好2022后,第二次读文件就有对应内容了:


更多关于HarmonyOS 鸿蒙Next Deveco Studio实现文件管理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS(鸿蒙)Next中,使用Deveco Studio实现文件管理主要涉及以下几个步骤:

  1. 创建项目:在Deveco Studio中创建一个新的HarmonyOS项目,选择适合的模板。

  2. 配置权限:在config.json文件中配置文件读写权限,确保应用可以访问设备存储。

  3. 使用文件管理API:HarmonyOS提供了ohos.file包,包含文件管理的相关API。常用的类包括FileFileReaderFileWriter等。

  4. 文件操作:

    • 创建文件:使用File类的构造函数创建文件对象,调用createNewFile()方法创建新文件。
    • 读取文件:使用FileReader类读取文件内容,可以通过read()方法读取文件数据。
    • 写入文件:使用FileWriter类写入文件内容,可以通过write()方法写入数据。
    • 删除文件:调用File类的delete()方法删除文件。
  5. 目录操作:

    • 创建目录:使用File类的mkdir()mkdirs()方法创建目录。
    • 列出目录内容:使用File类的list()listFiles()方法列出目录中的文件和子目录。
    • 删除目录:调用File类的delete()方法删除目录。
  6. 异常处理:在进行文件操作时,需要处理可能出现的异常,如IOException,确保程序的健壮性。

  7. 测试与调试:在Deveco Studio中使用模拟器或真机进行测试,确保文件管理功能正常工作。

通过以上步骤,可以在HarmonyOS Next中使用Deveco Studio实现基本的文件管理功能。

更多关于HarmonyOS 鸿蒙Next Deveco Studio实现文件管理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next中,使用DevEco Studio实现文件管理,可以通过以下步骤进行:

  1. 创建项目:在DevEco Studio中新建一个HarmonyOS项目,选择适合的模板。

  2. 添加文件管理功能:使用FileFileManager类进行文件操作。例如,创建、读取、写入和删除文件。

  3. 权限配置:在config.json中声明文件读写权限,确保应用有权访问设备存储。

  4. UI设计:使用XML布局文件设计用户界面,提供文件浏览和操作按钮。

  5. 逻辑实现:在Java或JS代码中实现文件管理逻辑,如文件列表展示、文件操作等。

  6. 测试与调试:在模拟器或真机上测试文件管理功能,确保其稳定性和性能。

通过这些步骤,你可以在HarmonyOS Next中实现基本的文件管理功能。

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