playwright/tests/utils/FileUtils.js
2025-03-04 17:13:49 +08:00

145 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 文件操作工具类
* 提供文件读写、目录创建等常用操作
*/
const fs = require('fs');
const path = require('path');
class FileUtils {
/**
* 获取数据文件的完整路径
* @param {string} fileName 文件名
* @param {string} baseDir 基础目录 (默认为 'data')
* @param {string} subDir 子目录名
* @returns {string} 完整的文件路径
*/
static getDataFilePath(fileName, baseDir = 'data', subDir = '') {
const parts = [process.cwd(), baseDir];
if (subDir) {
parts.push(subDir);
}
parts.push(fileName);
return path.join(...parts);
}
/**
* 确保目录存在,如果不存在则创建
* @param {string} dirPath 目录路径
* @returns {boolean} 操作是否成功
*/
static ensureDirectoryExists(dirPath) {
try {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath, { recursive: true });
console.log(`目录已创建: ${dirPath}`);
}
return true;
} catch (error) {
console.error(`创建目录失败: ${dirPath}`, error);
return false;
}
}
/**
* 保存对象到JSON文件
* @param {Object} data 要保存的数据对象
* @param {string} filePath 文件路径
* @param {Object} options 选项
* @param {boolean} options.pretty 是否美化JSON (默认: true)
* @param {string} options.encoding 文件编码 (默认: 'utf8')
* @returns {boolean} 操作是否成功
*/
static saveToJsonFile(data, filePath, options = {}) {
try {
const { pretty = true, encoding = 'utf8' } = options;
const indent = pretty ? 2 : 0;
// 确保目录存在
const dirPath = path.dirname(filePath);
this.ensureDirectoryExists(dirPath);
// 将对象转换为JSON字符串并写入文件
fs.writeFileSync(filePath, JSON.stringify(data, null, indent), encoding);
console.log(`数据已保存到: ${filePath}`);
return true;
} catch (error) {
console.error(`保存JSON文件失败: ${filePath}`, error);
return false;
}
}
/**
* 从JSON文件加载对象
* @param {string} filePath 文件路径
* @param {Object} options 选项
* @param {string} options.encoding 文件编码 (默认: 'utf8')
* @returns {Object|null} 加载的对象如果失败则返回null
*/
static loadFromJsonFile(filePath, options = {}) {
try {
const { encoding = 'utf8' } = options;
if (!fs.existsSync(filePath)) {
console.error(`文件不存在: ${filePath}`);
return null;
}
const data = fs.readFileSync(filePath, encoding);
return JSON.parse(data);
} catch (error) {
console.error(`加载JSON文件失败: ${filePath}`, error);
return null;
}
}
/**
* 保存文本到文件
* @param {string} text 要保存的文本
* @param {string} filePath 文件路径
* @param {Object} options 选项
* @param {string} options.encoding 文件编码 (默认: 'utf8')
* @returns {boolean} 操作是否成功
*/
static saveTextToFile(text, filePath, options = {}) {
try {
const { encoding = 'utf8' } = options;
// 确保目录存在
const dirPath = path.dirname(filePath);
this.ensureDirectoryExists(dirPath);
// 写入文件
fs.writeFileSync(filePath, text, encoding);
console.log(`文本已保存到: ${filePath}`);
return true;
} catch (error) {
console.error(`保存文本文件失败: ${filePath}`, error);
return false;
}
}
/**
* 从文件加载文本
* @param {string} filePath 文件路径
* @param {Object} options 选项
* @param {string} options.encoding 文件编码 (默认: 'utf8')
* @returns {string|null} 加载的文本如果失败则返回null
*/
static loadTextFromFile(filePath, options = {}) {
try {
const { encoding = 'utf8' } = options;
if (!fs.existsSync(filePath)) {
console.error(`文件不存在: ${filePath}`);
return null;
}
return fs.readFileSync(filePath, encoding);
} catch (error) {
console.error(`加载文本文件失败: ${filePath}`, error);
return null;
}
}
}
module.exports = FileUtils;