协慌网

登录 贡献 社区

如何获取 Node.js 目录中存在的所有文件的名称列表?

我正在尝试使用 Node.js 获取目录中存在的所有文件的名称列表。我想要输出是一个文件名数组。我怎样才能做到这一点?

答案

您可以使用fs.readdirfs.readdirSync方法。

fs.readdir

const testFolder = './tests/';
const fs = require('fs');

fs.readdir(testFolder, (err, files) => {
  files.forEach(file => {
    console.log(file);
  });
});

fs.readdirSync

const testFolder = './tests/';
const fs = require('fs');

fs.readdirSync(testFolder).forEach(file => {
  console.log(file);
});

两种方法的区别在于第一种方法是异步的,因此您必须提供一个在读取过程结束时执行的回调函数。

第二个是同步的,它将返回文件名数组,但它将停止进一步执行代码,直到读取过程结束。

上面的答案虽然没有对目录进行递归搜索。这是我为递归搜索所做的(使用node-walknpm install walk

var walk    = require('walk');
var files   = [];

// Walker options
var walker  = walk.walk('./test', { followLinks: false });

walker.on('file', function(root, stat, next) {
    // Add this file to the list of files
    files.push(root + '/' + stat.name);
    next();
});

walker.on('end', function() {
    console.log(files);
});

IMO 最方便的方法就是使用glob工具。这是 node.js 的glob 包 。安装时

npm install glob

然后使用通配符匹配文件名(示例来自包的网站)

var glob = require("glob")

// options is optional
glob("**/*.js", options, function (er, files) {
  // files is an array of filenames.
  // If the `nonull` option is set, and nothing
  // was found, then files is ["**/*.js"]
  // er is an error object or null.
})