如何使用node.js获取具有特定文件扩展名的文件的列表?

节点fs包有以下方法来列出一个目录:

fs.readdir(path,[callback])asynchronousreaddir(3)。 读取目录的内容。 callback函数获取两个参数(err,files),其中files是不包含'。'的文件名的数组。 和“..”。

fs.readdirSync(path)同步readdir(3)。 返回除“。”之外的文件名数组 和'..

但是,如何获得与文件规范匹配的文件列表,例如* .txt

你可以使用扩展提取函数过滤文件数组。 path模块提供了一个这样的函数,如果你不想写自己的string操作逻辑或正则expression式。

 var path = require('path'); var EXTENSION = '.txt'; var targetFiles = files.filter(function(file) { return path.extname(file).toLowerCase() === EXTENSION; }); 

编辑根据@ arboreal84的build议,你可能要考虑像myfile.TXT ,不太less见的情况下。 我只是自己testing它, path.extname不会为你做path.extname

基本上,你做这样的事情:

 const path = require('path') const fs = require('fs') const dirpath = path.join(__dirname, '/path') fs.readdir(dirname, function(err, files) { const txtFiles = files.filter(el => /\.txt$/.test(el)) // do something with your files, by the way they are just filenames... }) 

fs不支持过滤本身,但如果你不想过滤自己,那么使用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. }) 

我用下面的代码,它的工作正常:

 var fs = require('fs'); var path = require('path'); var dirPath = path.resolve(__dirname); // path to your directory goes here var filesList; fs.readdir(dirPath, function(err, files){ filesList = files.filter(function(e){ return path.extname(e).toLowerCase() === '.txt' }); console.log(filesList); });