You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
4.3 KiB

2 years ago
  1. 'use strict';
  2. const requireContext = require('require-context');
  3. const fs = require('fs');
  4. class FileHepler {
  5. checkVarType(obj) {
  6. let toString = Object.prototype.toString;
  7. let map = {
  8. '[object Boolean]': 'boolean',
  9. '[object Number]': 'number',
  10. '[object String]': 'string',
  11. '[object Function]': 'function',
  12. '[object Array]': 'array',
  13. '[object Date]': 'date',
  14. '[object RegExp]': 'regExp',
  15. '[object Undefined]': 'undefined',
  16. '[object Null]': 'null',
  17. '[object Object]': 'object'
  18. }
  19. return map[toString.call(obj)];
  20. }
  21. inArray(sourceArray = [], findArray = []) {
  22. if (this.checkVarType(sourceArray) === 'array' && this.checkVarType(findArray) === 'array') {
  23. let sourceArraylen = sourceArray.length;
  24. let find = JSON.parse(JSON.stringify(findArray));
  25. let temp = [];
  26. for (let i = 0; i < sourceArraylen; i++) {
  27. let sourceVal = sourceArray[i];
  28. for (let k = 0; k < find.length; k++) {
  29. if (find[k] === sourceVal) {
  30. temp.push(true);
  31. find.splice(k, 1);
  32. break;
  33. }
  34. }
  35. }
  36. return findArray.length === temp.length;
  37. } else {
  38. return false;
  39. }
  40. }
  41. getDirFiles(directory, fileType = [], ignoreFileName = []) {
  42. /**
  43. * @description
  44. * @type {RegExp}
  45. */
  46. let reg = new RegExp(`\.(${fileType.join('|')})$`);
  47. let regFile = new RegExp(`^(.*)\.(${fileType.join('|')})$`);
  48. let modulesFiles = requireContext(directory, true, reg);
  49. let modules = modulesFiles.keys().reduce((modules, modulePath) => {
  50. const moduleName = modulePath.replace(regFile, '$1');
  51. const extName = modulePath.replace(regFile, '$2');
  52. const moduleNameArr = moduleName.split('/');
  53. modules[moduleName] = {
  54. path: moduleName,
  55. fileName: moduleNameArr[moduleNameArr.length - 1],
  56. ext: extName,
  57. fullName: `${moduleName}.${extName}`
  58. };
  59. return modules;
  60. }, {});
  61. //过滤忽略文件
  62. let temp = {};
  63. Object.keys(modules).map((key) => {
  64. let item = modules[key];
  65. if (!this.inArray(ignoreFileName, [item['fileName']])) {
  66. temp[key] = modules[key];
  67. }
  68. });
  69. return temp;
  70. }
  71. /***
  72. * @description 复制文件到新位置
  73. * @param currentFilePath
  74. * @param targetFliePath
  75. */
  76. copyFile(currentFilePath, targetFliePath) {
  77. return new Promise((resolve,reject)=>{
  78. if (!fs.existsSync(currentFilePath)) {
  79. reject(`复制文件路径不存在:${currentFilePath}`);
  80. }
  81. let readStream = fs.createReadStream(currentFilePath);
  82. readStream.once('error', (err) => {
  83. reject(err);
  84. });
  85. readStream.once('end', () => {
  86. resolve();
  87. });
  88. readStream.pipe(fs.createWriteStream(targetFliePath));
  89. })
  90. }
  91. /***
  92. * @description 删除文件
  93. * @param FilePath
  94. * @returns {Promise<unknown>}
  95. */
  96. removeFile(FilePath){
  97. return new Promise((resolve, reject)=>{
  98. fs.unlink(FilePath, (err) => {
  99. if (err) {
  100. reject(err);
  101. return;
  102. }
  103. resolve('ok');
  104. });
  105. })
  106. }
  107. /**
  108. * @description 修改文件名字
  109. * @param FilePath
  110. * @param newPath
  111. * @returns {Promise<unknown>}
  112. */
  113. renameFile(FilePath,newPath){
  114. return new Promise((resolve, reject) => {
  115. fs.rename(FilePath, newPath ,(err) => {
  116. if (err) {
  117. reject(err);
  118. return;
  119. }
  120. resolve('ok');
  121. });
  122. })
  123. }
  124. /**
  125. * @description 判断文件是否存在
  126. * @param FilePath
  127. * @returns {Promise<unknown>}
  128. */
  129. existFile(FilePath){
  130. return new Promise((resolve, reject) => {
  131. fs.access(FilePath, fs.constants.F_OK, (err) => {
  132. if (err) {
  133. reject(err);
  134. return;
  135. }
  136. resolve('ok');
  137. });
  138. })
  139. }
  140. readFile(FilePath){
  141. return new Promise((resolve, reject) => {
  142. fs.readFile(FilePath,(err, data) => {
  143. if (err) {
  144. reject(err);
  145. return;
  146. }
  147. resolve(String(data));
  148. });
  149. });
  150. }
  151. writeFile(FilePath,data){
  152. return new Promise((resolve, reject) => {
  153. fs.writeFile(FilePath, data, (err) => {
  154. if (err) {
  155. reject(err);
  156. return;
  157. }
  158. resolve('ok');
  159. });
  160. });
  161. }
  162. }
  163. module.exports = new FileHepler();