161847f8eSopenharmony_ci/* 261847f8eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 461847f8eSopenharmony_ci * you may not use this file except in compliance with the License. 561847f8eSopenharmony_ci * You may obtain a copy of the License at 661847f8eSopenharmony_ci * 761847f8eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 861847f8eSopenharmony_ci * 961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and 1361847f8eSopenharmony_ci * limitations under the License. 1461847f8eSopenharmony_ci */ 1561847f8eSopenharmony_ci 1661847f8eSopenharmony_ciimport fs from 'fs'; 1761847f8eSopenharmony_ciimport path from 'path'; 1861847f8eSopenharmony_ciimport envConfig from '../config/env'; 1961847f8eSopenharmony_ciimport { LogUtil } from './logUtil'; 2061847f8eSopenharmony_ciimport { StringConstant } from '../utils/Constant'; 2161847f8eSopenharmony_ciif (!process.env.DIR_NAME) { 2261847f8eSopenharmony_ci Object.assign(process.env, envConfig); 2361847f8eSopenharmony_ci} 2461847f8eSopenharmony_ciexport class FileUtils { 2561847f8eSopenharmony_ci /** 2661847f8eSopenharmony_ci * 通过动态环境变量配置项目根目录的地址 2761847f8eSopenharmony_ci */ 2861847f8eSopenharmony_ci private static baseDirName: string = String(process.env.DIR_NAME); 2961847f8eSopenharmony_ci /** 3061847f8eSopenharmony_ci * 获取项目根目录的地址,相关配置可以查看src\config\env.ts中的DIR_NAME配置 3161847f8eSopenharmony_ci */ 3261847f8eSopenharmony_ci static getBaseDirName(): string { 3361847f8eSopenharmony_ci return this.baseDirName; 3461847f8eSopenharmony_ci } 3561847f8eSopenharmony_ci /** 3661847f8eSopenharmony_ci * 读取文件,返回满足要求的所有文件路径 3761847f8eSopenharmony_ci * 3861847f8eSopenharmony_ci * @param {string} dirName 文件目录 3961847f8eSopenharmony_ci * @param {(name: string) => boolean} [filter] 文件路径的过滤条件 4061847f8eSopenharmony_ci * @return {Array<string>} 4161847f8eSopenharmony_ci */ 4261847f8eSopenharmony_ci static readFilesInDir(dirName: string, filter?: (name: string) => boolean): Array<string> { 4361847f8eSopenharmony_ci const files: Array<string> = []; 4461847f8eSopenharmony_ci if (!fs.existsSync(dirName)) { 4561847f8eSopenharmony_ci return files; 4661847f8eSopenharmony_ci } 4761847f8eSopenharmony_ci fs.readdirSync(dirName, { withFileTypes: true }).forEach((dir) => { 4861847f8eSopenharmony_ci if (dir.name === StringConstant.NOT_SCAN_DIR) { 4961847f8eSopenharmony_ci return; 5061847f8eSopenharmony_ci } 5161847f8eSopenharmony_ci const filePath: string = path.join(dirName, dir.name); 5261847f8eSopenharmony_ci if (dir.isFile()) { 5361847f8eSopenharmony_ci if (!filter) { 5461847f8eSopenharmony_ci files.push(filePath); 5561847f8eSopenharmony_ci return; 5661847f8eSopenharmony_ci } 5761847f8eSopenharmony_ci if (filter(dir.name)) { 5861847f8eSopenharmony_ci files.push(filePath); 5961847f8eSopenharmony_ci } 6061847f8eSopenharmony_ci return; 6161847f8eSopenharmony_ci } 6261847f8eSopenharmony_ci files.push(...FileUtils.readFilesInDir(filePath, filter)); 6361847f8eSopenharmony_ci }); 6461847f8eSopenharmony_ci return files; 6561847f8eSopenharmony_ci } 6661847f8eSopenharmony_ci 6761847f8eSopenharmony_ci static writeStringToFile(str: string, filePath: string): void { 6861847f8eSopenharmony_ci const parentDir: string = path.dirname(filePath); 6961847f8eSopenharmony_ci if (!FileUtils.isExists(parentDir)) { 7061847f8eSopenharmony_ci fs.mkdirSync(parentDir, { recursive: true }); 7161847f8eSopenharmony_ci } 7261847f8eSopenharmony_ci fs.writeFileSync(filePath, str); 7361847f8eSopenharmony_ci } 7461847f8eSopenharmony_ci 7561847f8eSopenharmony_ci static isDirectory(path: string): boolean { 7661847f8eSopenharmony_ci const stats: fs.Stats = fs.lstatSync(path); 7761847f8eSopenharmony_ci return stats.isDirectory(); 7861847f8eSopenharmony_ci } 7961847f8eSopenharmony_ci 8061847f8eSopenharmony_ci static isFile(path: string): boolean { 8161847f8eSopenharmony_ci const stats: fs.Stats = fs.lstatSync(path); 8261847f8eSopenharmony_ci return stats.isFile(); 8361847f8eSopenharmony_ci } 8461847f8eSopenharmony_ci 8561847f8eSopenharmony_ci static isExists(pathName: string | undefined): boolean { 8661847f8eSopenharmony_ci if (!pathName) { 8761847f8eSopenharmony_ci return false; 8861847f8eSopenharmony_ci } 8961847f8eSopenharmony_ci try { 9061847f8eSopenharmony_ci fs.accessSync(path.resolve(this.baseDirName, pathName), fs.constants.R_OK); 9161847f8eSopenharmony_ci return true; 9261847f8eSopenharmony_ci } catch (exception) { 9361847f8eSopenharmony_ci const error = exception as Error; 9461847f8eSopenharmony_ci LogUtil.e(`error filePath`, error.stack ? error.stack : error.message); 9561847f8eSopenharmony_ci return false; 9661847f8eSopenharmony_ci } 9761847f8eSopenharmony_ci } 9861847f8eSopenharmony_ci} 99