适用于批量修改格式一样的文件
此篇缘由
我要批量修改json文件,把某个key对应的value值,之前是对象,我要把对象放到数组里面
console.log(__dirname);
const fs = require('fs');
const path = require('path');
// const directoryPath = __dirname;
function readJsonFilesInDirectory(directoryPath) {
fs.readdir(directoryPath, (err, files) => {
if (err) {
console.log('Error reading directory:', err);
return;
}
console.log(files)
files.forEach(file => {
const filePath = path.join(directoryPath, file);
fs.stat(filePath, (err, stats) => {
if (err) {
console.log('Error stating file:', err);
return;
}
if (stats.isDirectory()) {
readJsonFilesInDirectory(filePath); // 递归处理子目录
} else if (path.extname(file) === '.json') {
console.log(filePath); // 执行你想要的操作
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}
try {
let jsonData = JSON.parse(data);
if (jsonData.config && typeof jsonData.config === 'object') {
jsonData.config = [jsonData.config]; // 将config对象改为包含该对象的数组
fs.writeFile(filePath, JSON.stringify(jsonData, null, 2), 'utf8', err => {
if (err) {
console.error('Error writing file:', err);
return;
}
console.log('File has been successfully modified.');
});
} else {
console.log('The "config" key does not exist or is not an object.');
}
} catch (error) {
console.error('Error parsing JSON:', error);
}
});
}
});
});
});
}
const rootDirectory = __dirname;
readJsonFilesInDirectory(rootDirectory);
// 这里只能读一个层级目录
// fs.readdir(directoryPath, (err, files) => {
// if (err) {
// console.log('Error reading directory:', err);
// return;
// }
// const jsonFiles = files.filter(file => path.extname(file) === '.json');
// jsonFiles.forEach(file => {
// console.log(file);
// // 这里你可以对每个JSON文件执行你想要的操作
// });
// });
通过遍历我发现某个文件命名不一致,我要查找路径,所以又写了一个node
const fs = require('fs');
const path = require('path');
function findFileInDirectory(startPath, targetFile) {
if (!fs.existsSync(startPath)) {
console.log("目录不存在:", startPath);
return;
}
const files = fs.readdirSync(startPath);
for (let i = 0; i < files.length; i++) {
const filename = path.join(startPath, files[i]);
const stat = fs.lstatSync(filename);
if (stat.isDirectory()) {
findFileInDirectory(filename, targetFile); // 递归子目录
} else if (filename.includes(targetFile)) {
console.log("找到文件:", filename);
}
}
}
const startPath = './'; // 当前目录
const targetFile = 'package.bash.json'; // 替换为你要查找的文件名
findFileInDirectory(startPath, targetFile);
注意事项
1.写的过程node的方法要使用对,多个层级目录读取使用的方法不同。