精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發實戰:【文件管理】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-20 21:57 ? 次閱讀

介紹

本示例主要展示了文件管理相關的功能,使用[@ohos.multimedia.medialibrary]、[@ohos.filemanagement.userFileManager] 、[@ohos.fileio] 、[@ohos.file.fs]、[@ohos.app.ability.contextConstant]

接口,實現了增添文件、刪除文件、查找指定類型文件文件、復制并移動文件、切換加密分區和預覽圖片、監聽文件的功能;

效果預覽

image.png

使用說明

  1. 在主界面,可以點擊圖片、視頻、文檔、音頻等按鈕進入對應目錄的文件列表瀏覽界面;
  2. 在文檔列表瀏覽界面,點擊“+”按鈕,可以添加文件;
  3. 在文檔列表瀏覽界面,長按列表項會出現刪除圖片,點擊刪除圖標可以刪除文件;
  4. 在圖片文件列表界面,點擊圖片可以進入圖片預覽界面。
  5. 進入“我的手機”頁面前應先安裝[MyPhoneFilePage],在主頁點擊“我的手機”,進入應用目錄下。
    1. 列表的上方是默認的EL2加密分區的應用根目錄下文件列表,點擊下方兩個按鈕“data/app/el3”和“data/app/el4”分別進入EL3和EL4加密分區應用根目錄,進入后對文件或文件夾操作與EL2加密分區相同。
    2. 點擊左下角“新建文件夾”按鈕,在彈窗中輸入文件夾名稱,點擊彈窗中的“確定”按鈕,完成創建。
    3. 點擊新建的文件夾,進入目錄,在新目錄中點擊左下角的“新建文件”,在彈窗的窗口中填寫文件名稱,然后點擊確定,完成創建。
    4. 點擊右上角多選按鈕,選擇需要重命名的文件(僅選中一個文件時可用),點擊重命名,在彈窗中修改文件名稱,點擊“確定”,完成修改。
    5. 點擊右上角多選按鈕,選擇需要復制和移動的文件(可多選,并且不可移動到本身的子目錄下),選中后點擊左下角“復制和移動”按鈕,在頁面中點擊目標目錄會進入該目錄,在目標目錄下點擊“移動到這”按鈕,完成文件復制和移動。
    6. 點擊右上角多選按鈕,選擇需要刪除的文件,選中后點擊右下角“更多”按鈕,彈出的菜單中選擇“刪除”,在彈窗中點擊“刪除”,即可刪除文件。
    7. 點擊右上角多選按鈕,選擇一項需要修改時間的文件,選中后點擊右下角“更多”按鈕,彈出的菜單中選擇“修改文件(夾)時間”,在彈窗的文本框中輸入要修改的時間,點擊“確定”,即可修改文件(夾)時間。
    8. 點擊單個文件,可進入文件內容頁面,點擊右上角編輯按鈕,進入編輯模式編輯、修改文件內容,然后點擊右上角的保存按鈕保存對文件的修改,點擊左上角"X"按鈕退出編輯模式,點擊返回按鈕返回上一頁。
  6. 在主頁點擊“監聽文件”,進入文件監聽頁面。
    1. 點擊添加監聽按鈕,選擇IN_CREATE監聽,然后點擊確定按鈕,成功添加IN_CREATE監聽。
    2. 點擊添加按鈕,成功添加一個文件,觸發事件后日志顯示為相應日志:event:256,fileName為新增文件的路徑。
    3. 點擊停止監聽按鈕,選擇IN_CREATE監聽,然后點擊確定按鈕,成功停止IN_CREATE監聽。
    4. 點擊添加按鈕,成功添加一個文件,觸發事件后日志無變化。
    5. 點擊添加監聽按鈕,選擇IN_DELETE監聽,然后點擊確定按鈕,成功添加IN_DELETE監聽。
    6. 選擇要刪除的文件item,左滑后點擊刪除圖標,成功刪除一個文件,觸發事件后日志顯示為相應日志:event:512,fileName為刪除文件的路徑。
    7. 點擊停止監聽按鈕,選擇IN_DELETE監聽,然后點擊確定按鈕,成功停止IN_CREATE監聽。
    8. 選擇要刪除的文件item,左滑后點擊刪除圖標,成功刪除一個文件,觸發事件后日志無變化。
    9. 點擊添加監聽按鈕,選擇IN_MODIFY監聽,然后點擊確定按鈕,成功添加IN_MODIFY監聽。
    10. 選擇要編輯的文件item,左滑后點擊編輯圖標,進入文件編輯界面,修改文件名和文件內容,修改之后點擊保存圖標,頁面顯示的文件文件大小發生變化,然后點擊返回圖標后返回文件監聽界面,查看觸發事件后日志顯示為相應日志:event:2,fileName為修改后文件的路徑。IN_MODIFY監聽只監聽文件內容是否發生變化,若單獨修改文件名,則不會更新監聽日志。
    11. 點擊停止監聽按鈕,選擇IN_MODIFY監聽,然后點擊確定按鈕,成功停止IN_MODIFY監聽。
    12. 選擇要編輯的文件item,左滑后點擊編輯圖標,進入文件編輯界面,修改文件名和文件內容,修改之后點擊保存圖標,頁面顯示的文件文件大小發生變化,然后點擊返回圖標后返回文件監聽界面,查看觸發事件后日志無變化。

具體實現:

  • 增添文件、刪除文件、查找指定類型文件文件和預覽圖片的功能接口封裝在MediaLibraryManager,源碼參考:[MediaLibraryManager.ts]
/*

 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



import image from '@ohos.multimedia.image'

import mediaLibrary from '@ohos.multimedia.mediaLibrary'

import Logger from '../../utils/Logger'

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

import type { Permissions } from '@ohos.abilityAccessCtrl';



/**

 * 主要封裝了mediaLibrary庫相關的接口

 */

class MediaLibraryManager {

  requestPermission(context): void {

    let permissions: Array< Permissions > = [

      'ohos.permission.READ_MEDIA',

      'ohos.permission.WRITE_MEDIA'

    ]

    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();

    atManager.requestPermissionsFromUser(context, permissions, (code, result) = > {

      Logger.debug('permissionRequest ' + JSON.stringify(code) + ' Result: ' + JSON.stringify(result))

    })

  }



  async getPixelMapByFileAsset(fileAsset: mediaLibrary.FileAsset): Promise< image.PixelMap > {

    if (fileAsset == undefined) {

      Logger.error('fileAsset undefined')

      // 異常情況下統一返回undefined,不建議使用null

      return undefined

    }

    Logger.debug('begin getPixelMapByFileAsset:' + fileAsset.displayName)

    let fd: number = undefined

    let pixelMap = undefined

    try {

      fd = await fileAsset.open('rw')

      Logger.debug('getPixelMapByFileAsset fd: ' + fd)

      let imageSource = image.createImageSource(fd)

      Logger.debug('imageSource: ' + JSON.stringify(imageSource))

      let decodingOptions = {

        sampleSize: 1,

        editable: true,

        desiredSize: { width: 3000, height: 4000 },

        rotate: 0,

        desiredPixelFormat: 3,

        desiredRegion: { size: { height: 6000, width: 8000 }, x: 0, y: 0 },

        index: 0

      }

      pixelMap = await imageSource.createPixelMap(decodingOptions)

      Logger.debug('pixel size: ' + pixelMap.getPixelBytesNumber())

      fileAsset.close(fd)

    } catch (err) {

      Logger.debug('err: ' + JSON.stringify(err))

    }

    return pixelMap

  }



  getMediaLibrary(context): mediaLibrary.MediaLibrary {

    return mediaLibrary.getMediaLibrary(context)

  }



  async getFileAssets(context, fileType: mediaLibrary.MediaType): Promise< mediaLibrary.FetchFileResult > {

    Logger.debug('begin getFileAssets, fileType:' + fileType)

    let fileKeyObj = mediaLibrary.FileKey

    let imagesFetchOption = {

      selections: fileKeyObj.MEDIA_TYPE + '= ?',

      selectionArgs: [fileType.toString()],

    }

    let fetchFileResult: mediaLibrary.FetchFileResult = undefined

    try {

      fetchFileResult = await this.getMediaLibrary(context).getFileAssets(imagesFetchOption)

      Logger.debug('fetchFileResult count:' + fetchFileResult.getCount())

    } catch (error) {

      Logger.error('fetchFileResult Error: ' + JSON.stringify(error))

    }

    return fetchFileResult

  }



  async getFileAssetsByName(context, name: string): Promise< mediaLibrary.FileAsset > {

    Logger.debug('begin getFileAssetsByName: ' + name)

    let fileKeyObj = mediaLibrary.FileKey

    let imagesFetchOption = {

      selections: fileKeyObj.DISPLAY_NAME + '= ?',

      selectionArgs: [name.toString()],

    }

    let fetchFileResult: mediaLibrary.FetchFileResult = undefined

    let file: mediaLibrary.FileAsset = undefined

    try {

      fetchFileResult = await this.getMediaLibrary(context).getFileAssets(imagesFetchOption)

      Logger.debug('fetchFileResult count:' + fetchFileResult.getCount())

      file = await fetchFileResult.getFirstObject()

    } catch (error) {

      Logger.error('fetchFileResult Error: ' + JSON.stringify(error))

    }

    return file

  }



  async getThumbnail(fileAsset: mediaLibrary.FileAsset): Promise< image.PixelMap > {

    let thumbnail = undefined

    try {

      thumbnail = await fileAsset.getThumbnail()

      Logger.debug('PixelMap size: ' + thumbnail.getPixelBytesNumber())

    } catch (error) {

      Logger.error('getThumbnail Error: ' + JSON.stringify(error))

    }

    return thumbnail

  }



  async createFileAsset(context, mediaType: mediaLibrary.MediaType,

                        dir: mediaLibrary.DirectoryType, fileName: string): Promise< mediaLibrary.FileAsset > {

    Logger.debug('createFileAsset: ' + fileName)

    let media = this.getMediaLibrary(context)

    let path = await media.getPublicDirectory(dir)

    return await media.createAsset(mediaType, fileName, path)

  }



  async deleteFileAsset(fileAsset: mediaLibrary.FileAsset): Promise< void > {

    Logger.debug('deleteFileAsset:' + fileAsset.displayName);

    await fileAsset.trash(true);

  }

}



export default new MediaLibraryManager()
  • 使用mediaLibrary.getMediaLibrary來獲取MediaLibrary對象;
  • 讀取每個文件的數據:使用MediaLibrary.getFileAssets讀取滿足條件的文件集合FetchFileResult,然后調用FetchFileResult.getFirstObject();
  • 創建模擬文件:使用MediaLibrary.getPublicDirectory()獲取系統預定的目錄,然后使用MediaLibrary.createAsset();
  • 刪除指定路徑的文件:使用MediaLibrary.deleteAsset();
  • 獲取預覽圖:使用image.createImageSource()創建指定的文件資源ImageSource,然后調用ImageSource.createPixelMap(),接口參考:[@ohos.multimedia.image] 。
  • MyPhone模塊中的文件增刪、復制移動、查找功能封裝在FileSystem,源碼參考:[FileIoManager.ets]。
/*

 * Copyright (c) 2023 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



import storageStatistics from '@ohos.file.storageStatistics';

import fileio from '@ohos.fileio';

import prompt from '@ohos.promptAction';

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

import Logger from '../../utils/Logger';

import { FileType, SubDirectoryType } from '../../mock/local/FileData';



// 大小和單位

const GB_MAGNITUDE: number = 1024 * 1024 * 1024;

const MB_MAGNITUDE: number = 1024 * 1024;

const KB_MAGNITUDE: number = 1024;

const GB_SYMBOL: string = 'GB';

const MB_SYMBOL: string = 'MB';

const KB_SYMBOL: string = 'KB';

const BYTE_SYMBOL: string = 'B';



const TAG: string = 'FileIoManager';



class FileSystem {

  // 獲取文件大小

  getFileSize(filePath: string): string {

    try {

      let fileSize = fileio.statSync(filePath).size;

      if (fileSize / GB_MAGNITUDE > 1) {

        return `${(fileSize / GB_MAGNITUDE).toFixed(2)}${GB_SYMBOL}`;

      } else if (fileSize / MB_MAGNITUDE > 1) {

        return `${(fileSize / MB_MAGNITUDE).toFixed(2)}${MB_SYMBOL}`;

      } else if (fileSize / KB_MAGNITUDE > 1) {

        return `${(fileSize / KB_MAGNITUDE).toFixed(2)}${KB_SYMBOL}`;

      } else {

        return `${fileSize}${BYTE_SYMBOL}`;

      }

    } catch (err) {

      Logger.error(TAG, `getFileSize failed, code is ${err.code}, message is ${err.message}`);

      throw new Error(`getFileSize failed, code is ${err.code}, message is ${err.message}`);

    }

  }



/*

  // 總空間---默認GB

  async getTotalSize(): Promise< string > {

    let totalSize: number;

    try {

      totalSize = await storageStatistics.getTotalSize();

    } catch (err) {

      let error: BusinessError = err as BusinessError;

      Logger.error(TAG, `getTotalSize failed, code is ${error.code}, message is ${error.message}`);

      throw new Error(`getTotalSize failed, code is ${error.code}, message is ${error.message}`);

    }

    return `${(totalSize / GB_MAGNITUDE).toFixed(2)}${GB_SYMBOL}`;

  }



  // 剩余空間

  async getFreeSize(): Promise< string > {

    let freeSize: number;

    try {

      freeSize = await storageStatistics.getFreeSize();

    } catch (err) {

      let error: BusinessError = err as BusinessError;

      Logger.error(TAG, `getFreeSize failed, code is ${error.code}, message is ${error.message}`);

      throw new Error(`getFreeSize failed, code is ${error.code}, message is ${error.message}`);

    }



    if (freeSize / GB_MAGNITUDE > 1) {

      return `${(freeSize / GB_MAGNITUDE).toFixed(2)}${GB_SYMBOL}`;

    } else if (freeSize / MB_MAGNITUDE > 1) {

      return `${(freeSize / MB_MAGNITUDE).toFixed(2)}${MB_SYMBOL}`;

    } else if (freeSize / KB_MAGNITUDE > 1) {

      return `${(freeSize / KB_MAGNITUDE).toFixed(2)}${KB_SYMBOL}`;

    } else {

      return `${freeSize}${BYTE_SYMBOL}`;

    }

  }

*/



  // 根據沙箱路徑打開目錄

  getSubdirectory(filePath: string): Array< SubDirectoryType > {

    // 獲取目錄

    let dir: fileio.Dir;

    try {

      dir = fileio.opendirSync(filePath);

    } catch (err) {

      let error: BusinessError = err as BusinessError;

      Logger.error(TAG, `Open dir of path ${filePath} failed. error code is ${error.code}, message is ${error.message}`);

      throw new Error(`Open dir of path ${filePath} failed, code is ${error.code}, message is ${error.message}`);

    }

    // 讀取的結果

    let dirent: fileio.Dirent;

    // 結果數組

    class SubDirectory {

      name: string = '';

      type: number = 0;

      time: Date;

      childrenNum: number = 0;

      fileSize: string = '';

      constructor(time: Date) {

        this.time = time;

      }

    }

    let subdirectory: Array< SubDirectory > = []

    do {

      dirent = dir.readSync();

      if (dirent) {

        let subdirectoryNum: number = 0;

        let fileSize: string = '';

        let time: Date = new Date();

        // 如果是文件夾,就讀取文件夾中文件的數量

        if (dirent.isDirectory()) {

          subdirectoryNum = this.getSubdirectoryNum(filePath + `${dirent.name}`);

          time = this.getFileTime(filePath + `${dirent.name}`);

        } else {

          // 如果不是文件夾,就讀取文件大小和時間

          fileSize = this.getFileSize(filePath + `${dirent.name}`);

          time = this.getFileTime(filePath + `${dirent.name}`);

        }

        let item = new SubDirectory(time);

        item.name = dirent.name;

        item.type = dirent.isDirectory() ? 1 : 2;

        item.childrenNum = subdirectoryNum;

        item.fileSize = fileSize;

        subdirectory.push(item);

      }

    } while (dirent);

    return subdirectory;

  }



  // 獲取目錄中的子目錄個數

  getSubdirectoryNum(filePath: string): number {

    let dir: fileio.Dir;

    try {

      dir = fileio.opendirSync(filePath);

    } catch (err) {

      let error: BusinessError = err as BusinessError;

      Logger.error(TAG, `Open dir of path ${filePath} failed. error code is ${error.code}, message is ${error.message}`);

      throw new Error(`Open dir of path ${filePath} failed, code is ${error.code}, message is ${error.message}`);

    }

    // 讀取的結果

    let dirent: fileio.Dirent;

    // 記錄子目錄的個數

    let subdirectoryNum = 0;

    do {

      dirent = dir.readSync();

      if (dirent) {

        subdirectoryNum++;

      }

    } while (dirent);

    return subdirectoryNum;

  }



  // 獲取文件修改時間

  getFileTime(filePath: string): Date {

    try {

      let fileTime = fileio.statSync(filePath).mtime;

      return new Date(fileTime * 1000);

    } catch (err) {

      Logger.error(TAG, `getFileTime failed, code is ${err.code}, message is ${err.message}`);

      throw new Error(`getFileTime failed, code is ${err.code}, message is ${err.message}`);

    }

  }



  // 創建目錄

  createDirectory(filePath: string): void {

    try {

      fileio.mkdirSync(filePath);

    } catch (err) {

      Logger.error(TAG, `create directory failed, code is ${err.code}, message is ${err.message}`);

    }

  }



  // 創建文件

  createFile(filePath: string): void {

    try {

      fileio.openSync(filePath, 0o100, 0o666);

    } catch (err) {

      Logger.error(TAG, `create file failed, code is ${err.code}, message is ${err.message}`);

    }

  }



  // 刪除目錄和文件---選中項

  deleteSelected(dataArray: Map< string, number >): void {

    try {

      dataArray.forEach((value, data) = > {

        if (value === 1) {

          fileio.rmdirSync(data);

        } else {

          fileio.unlinkSync(data);

        }})

      prompt.showToast({ message: $r('app.string.label_delete_success') });

    } catch (err) {

      Logger.error(TAG, `delete failed, code is ${err.code}, message is ${err.message}`);

    }

  }



  // 復制文件

  copyFile(filePath: string, newFilePath: string): void {

    try {

      // 遍歷數據直接copy所有項目

      fileio.copyFileSync(filePath, newFilePath);

    } catch (err) {

      Logger.error(TAG, `copy file failed, code is ${err.code}, message is ${err.message}`);

    }

  }



  // 重命名文件

  renameFile(filePath: string, newFilePath: string): void {

    try {

      fileio.renameSync(filePath, newFilePath);

    } catch (err) {

      Logger.error(TAG, `rename file failed, code is ${err.code}, message is ${err.message}`);

    }

  }



  // 開始移動文件

  startMoveFile(needMoveFiles: Array< FileType >, newFilePath: string): void {

    // 遍歷數據

    needMoveFiles.forEach((file: FileType): void = > {

      // 如果是目錄

      if (file.type === 1) {

        // 先創建這個目錄

        this.createDirectory(`${newFilePath}/${file.fileName}`);

        // 獲取當前文件夾下的所有文件目錄

        let subdirectory = this.getSubdirectory(`${file.filePath}/`);

        // 處理為我們想要的格式

        let needMoveFiles: Array< FileType > = [];

        // 遍歷子目錄數據

        subdirectory.forEach((subdirectoryData: SubDirectoryType) = > {

          let data: FileType = {

            filePath: `${file.filePath}/${subdirectoryData.name}`,

            fileName: subdirectoryData.name,

            type: subdirectoryData.type

          };

          // 逐一添加進去

          needMoveFiles.push(data);

        })

        // 使用我們的數據遞歸

        this.startMoveFile(needMoveFiles, `${newFilePath}/${file.fileName}`);

      } else {

        this.copyFile(file.filePath, `${newFilePath}/${file.fileName}`);

      }

    })

  }

}



export default new FileSystem();
  • 讀取文件列表:使用fileio.opendirSync()打開指定目錄dir,然后使用dir.readSync()讀取文件內容dirent,在調用dirent中相關api獲取想要的文件參數;
  • 創建目錄:使用fileio.mkdirSync()創建文件夾;
  • 創建文件:使用fileio.openSync()創建文件;
  • 刪除選中內容:使用fileio.rmdirSync()刪除文件夾,使用fileio.unlinkSync()刪除文件;
  • 復制文件:使用fileio.copyFileSync()復制目標文件;
  • 移動文件:使用fileio.mkdirSync()創建指定目錄,再遞歸選中目錄中的文件,將內部的文件創建到指定的位置。
  • 修改加密分區:修改應用上下文Context的area,實現當前加密分區的修改。
  • 在Library模塊中通過封裝FileManager向外提供功能接口,如MediaLibraryManager.getPixelMapByFileAsset(),源碼參考:[FileManager.ts]
/*

 * Copyright (c) 2022 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



import mediaLibrary from '@ohos.multimedia.mediaLibrary'

import image from '@ohos.multimedia.image'

import MediaLibraryManager from './medialibrary/MediaLibraryManager'

import LocalMockData from '../mock/local/LocalMockData'



/**

 * 文件管理接口,統一封裝了各模塊對外提供的功能接口

 */

class FileManager {

  /**

   * 申請文件管理權限

   * @param context 上下文對象

   */

  requestPermission(context): void {

    MediaLibraryManager.requestPermission(context)

  }



  /**

   * 通過傳入文件對象FileAsset,獲取到文件中的圖片PixelMap對象

   * @param fileAsset 文件對象

   * @return Promise< image.PixelMap > 返回PixelMap對象

   */

  async getPixelMapByFileAsset(fileAsset: mediaLibrary.FileAsset): Promise< image.PixelMap > {

    return await MediaLibraryManager.getPixelMapByFileAsset(fileAsset)

  }



  /**

   * 通過傳入文件類型,獲取到不同的文件列表信息

   * @param context 上下文對象

   * @param fileType 文件類型

   * @return Promise< mediaLibrary.FetchFileResult > 返回文件列表信息

   */

  async getFileAssets(context, fileType: mediaLibrary.MediaType): Promise< mediaLibrary.FetchFileResult > {

    return await MediaLibraryManager.getFileAssets(context, fileType)

  }



  /**

   * 通過文件名稱獲取文件對象

   * @param context 上下文對象

   * @param name 文件名稱

   * @return Promise< mediaLibrary.FileAsset > 返回文件對象信息

   */

  async getFileAssetsByName(context, name: string): Promise< mediaLibrary.FileAsset > {

    return await MediaLibraryManager.getFileAssetsByName(context, name)

  }



  /**

   * 獲取文件縮略圖

   * @param fileAsset 文件對象

   * @return Promise< image.PixelMap > 返回縮略圖信息

   */

  async getThumbnail(fileAsset: mediaLibrary.FileAsset): Promise< image.PixelMap > {

    return await MediaLibraryManager.getThumbnail(fileAsset)

  }



  /**

   * 創建文件

   * @param context 上下文對象

   * @param mediaType 文件類型

   * @param dir 文件路徑

   * @param fileName 文件名稱

   * @return Promise< mediaLibrary.FileAsset > 返回匹配的文件信息

   */

  async createFileAsset(context, mediaType: mediaLibrary.MediaType,

                        dir: mediaLibrary.DirectoryType, fileName: string): Promise< mediaLibrary.FileAsset > {

    return await MediaLibraryManager.createFileAsset(context, mediaType, dir, fileName)

  }



  /**

   * 刪除文件

   * @param fileAsset 文件對象

   */

  async deleteFileAsset(fileAsset: mediaLibrary.FileAsset): Promise< void > {

    await MediaLibraryManager.deleteFileAsset(fileAsset);

  }



  /**

   * 創建模擬文件

   * @param context 上下文對象

   * @param mediaType 文件類型

   * @return Promise< mediaLibrary.FileAsset > 返回文件對象

   */

  async createTxtFileAsset(context): Promise< mediaLibrary.FileAsset > {

    return await LocalMockData.createFileAsset(context)

  }



  /**

   * 該文件是否支持預覽

   * @param fileName 文件名

   * @return boolean ture表示支持,false表示不支持

   */

  isSupportPreview(fileName: string): boolean {

    return LocalMockData.isSupportPreview(fileName)

  }

}



export default new FileManager()
  • 如效果預覽中的 圖片列表 ,讀取指定類型的文件:在[FileList.ets]中調用FileManager.getFileAssets();
  • 創建模擬文件:在[FileList.ets] 中調用FileManager.createTxtFileAsset();
  • 刪除指定路徑的文件:在[FileList.ets] 中調用FileManager.deleteFileAsset();
  • 獲取縮略圖:在[ThumbnailImage.ets] 中調用FileManager.getThumbnail();
  • 如效果預覽中的 圖片預覽 ,獲取預覽圖:在[ImagePreview.ets] 中調用FileManager.getPixelMapByFileAsset()。
  • 監聽文件模塊中的文件增刪、查找、修改、監聽功能封裝在MyWatcher。
  • 增加文件、刪除文件、監聽文件、停止監聽文件:在[WatcherFile.ets] 中調用MyWathcer.addFileToWatcher()、MyWathcer.deleteFileToWatcher()、MyWathcer.startWatcher(watcherName)、MyWathcer.stopWatcher();
  • 修改文件:在[EditFile.ets]

中調用MyWatcher.modifyFileToWatcher()。

鴻蒙Next技術知識已更新[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]請前往參考。

約束與限制

  1. 本示例僅支持標準系統上運行,支持設備:RK3568;
  2. 本示例為Stage模型,僅支持API11版本SDK,SDK版本號(API Version 11 Beta),鏡像版本號(4.1Beta)。
  3. 本示例需要使用DevEco Studio 版本號(4.0Release)及以上版本才可編譯運行。
  4. 本示例涉及調用系統權限的接口,需要配置允許權限列表,在配置文件中的“allowed-acls”字段中增加"ohos.permission.READ_MEDIA", "ohos.permission.WRITE_MEDIA", "ohos.permission.FILE_ACCESS_MANAGER", "ohos.permission.STORAGE_MANAGER"四個權限。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8497

    瀏覽量

    150834
  • 鴻蒙
    +關注

    關注

    57

    文章

    2310

    瀏覽量

    42742
收藏 人收藏

    評論

    相關推薦

    鴻蒙實戰項目開發:【短信服務】

    數據管理 電話服務 分布式應用開發 通知與窗口管理 多媒體技術 安全技能 任務管理 WebGL 國際化開發 應用測試 DFX面向未來設計
    發表于 03-03 21:29

    鴻蒙實戰開發-本地部署、SmartPerf 編譯部署指導文檔

    你們的 『點贊和評論』,才是我創造的動力。 關注小編,同時可以期待后續文章ing?,不定期分享原創知識。 更多鴻蒙最新技術知識點,請關注作者博客:鴻蒙實戰經驗分享:鴻蒙基礎入門
    發表于 05-09 14:23

    鴻蒙Flutter實戰:07混合開發

    # 鴻蒙Flutter實戰:混合開發 鴻蒙Flutter混合開發主要有兩種形式。 ## 1.基于har 將flutter module
    發表于 10-23 16:00

    鴻蒙Flutter實戰:08-如何調試代碼

    # 鴻蒙Flutter實戰:如何調試代碼 ## 1.環境搭建 參考文章[鴻蒙Flutter實戰:01-搭建開發環境](https://g
    發表于 10-23 16:29

    鴻蒙Flutter實戰:11-使用 Flutter SDK 3.22.0

    # 使用 Flutter SDK 3.22.0 ## SDK 安裝 參考[鴻蒙Flutter實戰:01-搭建開發環境]文章的說明,首先安裝 Flutter SDK 3.22.0。 目前
    發表于 11-01 15:03

    鴻蒙 OS 應用開發初體驗

    Package 的縮寫)。是鴻蒙操作系統設計的應用程序包格式。 .hap 文件包含了應用程序的代碼、資源和元數據等信息,用于在 HarmonyOS 設備上安裝和運行應用程序。 整體開發流程跟
    發表于 11-02 19:38

    LabVIEW入門與實戰開發100例

    LabVIEW入門與實戰開發100例LabVIEW入門與實戰開發100例LabVIEW入門與實戰開發
    發表于 02-18 11:44 ?0次下載

    如何使用 HiBurn 工具燒錄鴻蒙的 .bin 文件到 Hi3861 開發

    鴻蒙官方文檔的Hi3861開發板第一個示例程序中描述了如何使用 DevEco Device Tool 工具燒錄二進制文件到 Hi3861 開發板。本文將介紹如何使用 HiBurn 工具
    的頭像 發表于 10-25 09:23 ?4620次閱讀

    華為開發者大會分論壇HarmonyOS測試技術與實戰-鴻蒙智聯認證生態設備測試挑戰

    HDC 2021華為開發者大會分論壇HarmonyOS測試技術與實戰-鴻蒙智聯認證生態設備測試挑戰
    的頭像 發表于 10-23 16:40 ?1785次閱讀
    華為<b class='flag-5'>開發</b>者大會分論壇HarmonyOS測試技術與<b class='flag-5'>實戰</b>-<b class='flag-5'>鴻蒙</b>智聯認證生態設備測試挑戰

    自制一款鴻蒙應用文件管理

    在涉及應用內部存儲的開發時,常常翻閱手機自帶的文件管理檢查。正好在學習文件管理的接口,想著實現一個第三方組件用于當前應用的
    的頭像 發表于 03-08 14:22 ?1780次閱讀

    鴻蒙開發實戰【通話管理

    通話管理模塊主要管理CS(Circuit Switch,電路交換)、IMS(IP Multimedia Subsystem,IP多媒體子系統)和OTT(over the top,OTT解決方案)三種類型的通話,負責申請通話所需要的音視頻資源,并處理多路通話時產生的各種沖突
    的頭像 發表于 03-14 20:10 ?389次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b>【通話<b class='flag-5'>管理</b>】

    鴻蒙APP開發實戰:【Api9】拍照、拍視頻;選擇圖片、視頻、文件工具類

    鴻蒙開發過程中,經常會進行系統調用,拍照、拍視頻、選擇圖庫圖片、選擇圖庫視頻、選擇文件。今天就給大家分享一個工具類。
    的頭像 發表于 03-26 16:27 ?723次閱讀
    <b class='flag-5'>鴻蒙</b>APP<b class='flag-5'>開發</b><b class='flag-5'>實戰</b>:【Api9】拍照、拍視頻;選擇圖片、視頻、<b class='flag-5'>文件</b>工具類

    OpenHarmony開發實例:【鴻蒙.bin文件燒錄】

    如何使用HiBurn工具燒錄鴻蒙的.bin文件到Hi3861開發板。
    的頭像 發表于 04-14 09:54 ?393次閱讀
    OpenHarmony<b class='flag-5'>開發</b>實例:【<b class='flag-5'>鴻蒙</b>.bin<b class='flag-5'>文件</b>燒錄】

    鴻蒙開發文件管理:【@ohos.fileio (文件管理)】

    該模塊提供文件存儲管理能力,包括文件基本管理文件目錄管理
    的頭像 發表于 06-12 18:12 ?1116次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發文件</b><b class='flag-5'>管理</b>:【@ohos.fileio (<b class='flag-5'>文件</b><b class='flag-5'>管理</b>)】

    鴻蒙開發文件管理:【@ohos.fileManager (公共文件訪問與管理)】

    該模塊提供公共文件訪問和管理的服務接口,向下對接底層文件管理服務,如媒體庫、外卡管理;向上對應用程序提供公共
    的頭像 發表于 06-12 17:00 ?768次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發文件</b><b class='flag-5'>管理</b>:【@ohos.fileManager (公共<b class='flag-5'>文件</b>訪問與<b class='flag-5'>管理</b>)】