节点 - 读取该目录中目录和目录中所有文件的内容

时间:2017-06-23 10:47:20

标签: node.js file-read

我的目录结构如下

|demo
  |abc
    abc.js
    abc.html
  |xyz
    test.js
    test.html
  |images
  pqr.js

我想阅读演示存储库及其子存储库中每个文件的内容。需要匹配每个文件中的模式和成功匹配,该条目应与文件名一起进入数组。有什么建议吗?

我尝试了以下代码,但它不会读取子目录中的文件

var fs=require('fs');

var dir = './demo';
fs.readdir(dir,function(err,files){
  if (err) throw err;
  files.forEach(function(file){
    if(file) {
      fs.readFile('./demo/'+file, 'utf8', function (err,data) {
        if (err) {
          return console.log(err);
        }
        console.log(data);
      });
    }
  });
});

我不想要一个目录数组。我想读取目录和子目录中每个文件的内容并匹配一个字符串。如果该字符串存在,请将其输入到具有文件名的数组中。

3 个答案:

答案 0 :(得分:2)

我怀疑你遇到了涉及递归的问题。这是一个让你前进的样本。

警告即可。它是同步编写的,以便更容易理解并且不检查非文件(符号链接,套接字等),但应该走上正确的道路。我还使用字符串插值来构建路径......你应该使用path.join

function getFiles(dir) {

    // get all 'files' in this directory
    var all = fs.readdirSync(dir);

    // process each checking directories and saving files
    return all.map(file => {
        // am I a directory?
        if (fs.statSync(`${dir}/${file}`).isDirectory()) {
            // recursively scan me for my files
            return getFiles(`${dir}/${file}`);
        }
        // WARNING! I could be something else here!!!
        return `${dir}/${file}`;     // file name (see warning)
    });
}

这将返回一个文件名的嵌套数组,你应该在读取之前使用flatMap(或者通过结果使用递归)

答案 1 :(得分:1)

这段代码可以很好地做到这一点,请循环一遍:

Scaffold(
      appBar: AppBar(
        title: searchbar(),
        actions: [
          NavigationControls(_controller.future),
        ],

答案 2 :(得分:0)

你不能“递归地”进行搜索。

var fs = require('fs');
var path = require('path');

var recursiveSearch = function(directoryPath) {
    fs.readdir(directoryPath, function(err, list) {
        if (err) { return }

        list.forEach(function(file) {
            file = path.resolve(directoryPath, file);

            fs.stat(file, function (err, stat) {
                if (stat && stat.isDirectory()) {
                    recursiveSearch(file);
                } else {
                    fs.readFile(file, function (err, data) {
                        // read file contents here and 
                        console.log(file);
                        console.log(data);
                    })
                }
            })
        })
    })
};


recursiveSearch('C:\\sample_directory');