OpenHarmony源碼解析之JavaScript(文件管理API)
1、簡介
文件管理在手機、平板、智慧屏等設備上都是一個很重要的功能,通過文件管理相關 API 我們可以實現對指定文件的刪除、復制、移動、壓縮解壓縮等操作。本篇文章通過一個小DEMO來演示該如何使用官方提供的API來實現對指定文件的相關操作。
1.1 OpenHarmony架構圖

1.2 文件管理Demo效果演示
2、基礎知識
注意:
API Version 6 開始支持。
目前只能對應用私有目錄下的文件操作權限,想實現類似文件管理的應用還需等更高權限的開放。
2.1 主要API

2.2 參考資料
HarmonyOS js-apis-fileio( 文件管理)
OpenHarmony js-apis-fileio.md( 文件管理)
3、示例Demo
目前文件管理API支持在手機、平板、智慧屏上調用,暫不支持智能穿戴設備上調用。使用該功能模塊對文件/目錄進行操作前,需要先獲取其絕對路徑,獲取方式及其接口用法請參考Ability上下文。
3.1 獲取Ability上下文
在使用AbilityContext的功能前,需要通過getContext()先獲取Context對象。在使用AbilityContext的功能前,需要通過getContext()先獲取Context對象。
示例
- import ability_featureability from '@ohos.ability.featureAbility'
- var context = ability_featureability.getContext();
3.2 獲取應用目錄路徑
目錄類型如下圖所示:

“文件/目錄絕對路徑”=“應用目錄路徑”+“文件/目錄名”,通過上述接口獲取到應用目錄路徑dir,文件名為“xxx.txt”,文件所在絕對路徑為:
let path = dir + "xxx.txt";
示例
- context.getFilesDir()
- .then((data) => {
- console.info('Cache directory obtained. Data: ' + data + "getFilesDir");
- this.filePath = data;
- this.mDirPath = this.filePath + "/cache_files/";
- this.findFile();
- }).catch((error) => {
- console.error('Failed to obtain the cache directory. Cause:' + error.message);
- })
3.3 創建測試文件
在對文件操作之前我們首先創建幾個測試文件,通過以下代碼就可以成功創建文件
示例
- createTestFiles() {
- for (let i = 0;i < 4; i++) {
- file.writeText({
- uri: 'internal://app//cache_files/' + "file-manager-test" + i + ".txt",
- text: 'Text that just for test.' + i,
- success: function () {
- console.log('call writeText success.');
- },
- fail: function (data, code) {
- console.error('call fail callback fail, code: ' + code + ', data: ' + data);
- },
- });
- }
- }
3.4 導入文件管理模塊
- import fileio from '@ohos.fileio';
3.5 獲取文件詳細信息
以異步方法獲取文件信息,使用callback形式返回結果
- fileio.stat(path, function (err, stat) {
- });
以同步方法獲取文件的信息
- let stat = fileio.statSync(path);
以異步方式為例,我們可以獲取到文件的大小等信息,代碼如下:
- let path = that.mDirPath + any[i].uri.substring(index + 1);
- fileio.stat(path, function (err, stat) {
- console.info("Get file stat success:" + "fileSize:" + stat.size +
- "-------" + "fileName:" + any[i].uri.substring(index + 1));
- });
日志截圖如下:

3.6 刪除文件
以異步方法刪除文件,使用callback形式返回結果
- fileio.unlink(path, function(err) {
- if (!err) {
- // 文件刪除成功
- }
- });
以同步方法刪除文件
- fileio.unlinkSync(path);
以異步方式為例,執行文件的刪除操作,代碼如下:
- fileio.unlink(filePath, function (err) {
- if (!err) {
- prompt.showToast({
- message: "刪除成功"
- });
- }
- });
通過對比查看刪除前后的日志文件可以驗證文件刪除成功:

3.7 創建文件夾
以異步方法創建目錄,使用callback形式返回結果
- fileio.mkdir(path, function(err) {
- if (!err) {
- // 創建文件夾成功
- }
- });
以同步方法創建目錄
- fileio.mkdirSync(path);
以同步創建目錄方式,創建dir_test_ 測試文件夾,代碼如下:
- for (let i = 0;i < 4; i++) {
- fileio.mkdirSync(data + "/cache_files/dir_test_" + i);
- }
通過日志我們可以驗證文件夾創建成功

3.8 文件的復制、移動操作
以異步方法復制文件,使用callback形式返回結果
- fileio.copyFile(src, dest, function (err) {
- });
以同步方法復制文件
- fileio.copyFileSync(src, dest);
src:待復制文件的路徑或待復制文件的描述符,dest:目標文件路徑或目標文件描述符,具體代碼如下:
- fileio.copyFile(filePath, dest, function (err) {
- if(!err){
- prompt.showToast({
- message: "復制成功"
- });
- }
- });
通過查詢目標路徑下面文件信息來驗證操作是否成功

文章相關附件可以點擊下面的原文鏈接前往下載
https://harmonyos.51cto.com/resource/1524