node查找某个文件,批量修改文件

42 阅读1分钟

适用于批量修改格式一样的文件

此篇缘由

我要批量修改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的方法要使用对,多个层级目录读取使用的方法不同。