HarmonyOS 鸿蒙Next Deveco Studio实现文件管理
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
在HarmonyOS(鸿蒙)Next中,使用DevEco Studio实现文件管理,可以通过以下步骤进行:
-
创建项目:在DevEco Studio中新建一个HarmonyOS项目,选择适合的模板。
-
添加文件管理功能:使用
File
和FileManager
类进行文件操作。例如,创建、读取、写入和删除文件。 -
权限配置:在
config.json
中声明文件读写权限,确保应用有权访问设备存储。 -
UI设计:使用XML布局文件设计用户界面,提供文件浏览和操作按钮。
-
逻辑实现:在Java或JS代码中实现文件管理逻辑,如文件列表展示、文件操作等。
-
测试与调试:在模拟器或真机上测试文件管理功能,确保其稳定性和性能。
通过这些步骤,你可以在HarmonyOS Next中实现基本的文件管理功能。