当前位置:   article > 正文

华为鸿蒙应用--文件管理工具(鸿蒙工具)-ArkTs_鸿蒙files

鸿蒙files

0、代码

  1. import fs from '@ohos.file.fs';
  2. import { Logger } from './Logger';
  3. import { Constants } from '../constants/Constants';
  4. import { toast } from './ToastUtils';
  5. export class FileUtils {
  6. /**
  7. * 获取目录下所有文件
  8. * @param filesDir
  9. * @returns
  10. */
  11. static getFiles(filesDir: string) {
  12. return this.getFilesWithFilter(filesDir);
  13. }
  14. /**
  15. * 获取目录下所有过滤的文件
  16. * @param filesDir
  17. * @returns
  18. */
  19. static async getFilesWithFilter(pathDir: string, filter?: any) {
  20. let files: string[]
  21. let options = {}
  22. if (filter !== undefined) {
  23. options = filter;
  24. }
  25. await fs.listFile(pathDir, options).then((filenames) => {
  26. files = filenames;
  27. }).catch((err) => {
  28. toast(err);
  29. files = [];
  30. Logger.error(Constants.TAG, JSON.stringify(err));
  31. });
  32. return files;
  33. }
  34. /**
  35. * 获取文件详细属性信息
  36. * @param filePath
  37. */
  38. static async getFileStat(filePath: string) {
  39. let resp;
  40. await fs.stat(filePath).then((stat) => {
  41. resp = stat;
  42. }).catch((err) => {
  43. toast(err);
  44. Logger.error(Constants.TAG, JSON.stringify(err));
  45. });
  46. return resp;
  47. }
  48. /**
  49. * 检查文件是否存在
  50. * @param filePath
  51. */
  52. static async accessFile(filePath: string) {
  53. let resp = false;
  54. await fs.access(filePath).then((res) => {
  55. resp = res;
  56. }).catch((err) => {
  57. toast(err);
  58. Logger.error(Constants.TAG, JSON.stringify(err));
  59. });
  60. return resp;
  61. }
  62. /**
  63. * 复制文件
  64. * @param filePath
  65. */
  66. static async copyFile(srcPath: string, dstPath: string) {
  67. let access = await this.accessFile(srcPath);
  68. if (access) {
  69. await fs.copyFile(srcPath, dstPath).then(() => {
  70. toast("复制成功");
  71. Logger.debug(Constants.TAG, "复制成功");
  72. }).catch((err) => {
  73. toast(err.message);
  74. Logger.error(Constants.TAG, "copy file failed with error message: " + err.message + ", error code: " + err.code);
  75. });
  76. } else {
  77. toast("原文件不存在!")
  78. }
  79. }
  80. /**
  81. * 创建目录
  82. * @param filePath
  83. */
  84. static async mkdir(dirPath: string) {
  85. await fs.mkdir(dirPath).then(() => {
  86. toast("创建成功");
  87. Logger.debug(Constants.TAG, "创建成功");
  88. }).catch((err) => {
  89. toast(err.message);
  90. Logger.error(Constants.TAG, "mkdir failed with error message: " + err.message + ", error code: " + err.code);
  91. });
  92. }
  93. /**
  94. * 打开文件读取数据
  95. * @param filePath
  96. */
  97. static async openAndRedFile(filePath: string) {
  98. let resp: string;
  99. let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
  100. let buf = new ArrayBuffer(4096);
  101. await fs.read(file.fd, buf).then((readLen) => {
  102. Logger.debug(Constants.TAG, String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen))));
  103. resp = String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen)));
  104. fs.closeSync(file);
  105. }).catch((err) => {
  106. resp = "";
  107. Logger.error(Constants.TAG, "read file data failed with error message: " + err.message + ", error code: " + err.code);
  108. });
  109. return resp;
  110. }
  111. /**
  112. * 删除整个目录
  113. * @param filePath
  114. */
  115. static async rmdir(pathDir : string) {
  116. let access = await this.accessFile(pathDir);
  117. if (access) {
  118. await fs.rmdir(pathDir).then(() => {
  119. toast("删除成功");
  120. Logger.debug(Constants.TAG, "删除成功");
  121. }).catch((err) => {
  122. toast(err.message);
  123. Logger.error(Constants.TAG, "rmdir failed with error message: " + err.message + ", error code: " + err.code);
  124. });
  125. } else {
  126. toast("原文件不存在!")
  127. }
  128. }
  129. }

1、使用:

  1. static async test(){
  2. let filePath = getContext(this).filesDir;
  3. let files = await FileUtils.getFiles(filePath); // 列出文件夹下所有文件名
  4. let options = {
  5. "recursion": false, // 是否递归子目录下文件名,默认为false。
  6. "listNum": 0, // 列出文件名数量。当设置0时,列出所有文件,默认为0。
  7. "filter": {
  8. "suffix": [".png", ".jpg", ".jpeg", ".txt"], // Array<string>:文件后缀名完全匹配
  9. "displayName": ["*abc", "test2*"], // Array<string>:文件名模糊匹配
  10. //"mimeType": ["text/html"], // Array<string>:mime类型完全匹配
  11. "fileSizeOver": 0, // number:文件大小匹配
  12. "lastModifiedAfter": 0, // number:文件最近修改时间匹配,在指定时间点及之后的文件。
  13. "excludeMedia": false, // boolean:是否排除Media中已有的文件。
  14. }
  15. };
  16. let files2 = await FileUtils.getFilesWithFilter(filePath, options) // 列出文件夹下所有文件名,支持递归列出所有文件名(包含子目录下),支持文件过滤
  17. let stat = await FileUtils.getFileStat(filePath + "/test1.txt") // 获取文件详细属性信息
  18. Logger.debug(Constants.TAG, "ino:" + stat.ino) // 标识该文件。通常同设备上的不同文件的INO不同。
  19. Logger.debug(Constants.TAG, "mode:" + stat.mode) // 表示文件权限,各特征位的含义见:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-file-fs-0000001451843016-V2#ZH-CN_TOPIC_0000001574088233__stat
  20. Logger.debug(Constants.TAG, "uid:" + stat.uid) // 文件所有者的ID。
  21. Logger.debug(Constants.TAG, "gid:" + stat.gid) // 文件所有组的ID。
  22. Logger.debug(Constants.TAG, "size:" + stat.size) // 文件的大小,以字节为单位。仅对普通文件有效。
  23. Logger.debug(Constants.TAG, "atime:" + stat.atime) // 上次访问该文件的时间,表示距1970年1月1日0时0分0秒的秒数。
  24. Logger.debug(Constants.TAG, "mtime:" + stat.mtime) // 上次修改该文件的时间,表示距1970年1月1日0时0分0秒的秒数。
  25. Logger.debug(Constants.TAG, "ctime:" + stat.ctime) // 最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的秒数。
  26. let access = await FileUtils.accessFile(filePath + "/test1.txt") // 检查文件是否存在
  27. await FileUtils.copyFile(filePath + "/test1.txt", filePath + "/test22.txt") // 复制文件
  28. await FileUtils.mkdir(filePath + "/testDir") // 创建目录
  29. let readLen = await FileUtils.openAndRedFile(filePath + "/test1.txt") // 打开.txt文件并读取内容
  30. await FileUtils.rmdir(filePath + "/testDir") // 删除整个目录
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/246311
推荐阅读
相关标签
  

闽ICP备14008679号