如何使用Node.js的fs模块统计文件夹内指定类型的文件总数量
实现统计指定类型文件数量的修改方案
你可以对fs.readdir返回的文件名数组做后缀过滤,即可实现需求,以下是完整可运行的修改后代码:
const fs = require('fs'); const path = require('path'); // 替换为你要统计的目标文件夹路径 const targetDir = './your-folder-path'; // 替换为你要统计的文件后缀,注意带点号,比如.png、.txt const targetExtension = '.js'; fs.readdir(targetDir, (err, files) => { // 异常处理:捕获目录不存在、无读取权限等问题 if (err) { console.error('目录读取失败:', err); return; } // 过滤出后缀匹配的文件 const matchFiles = files.filter(file => { // path.extname可以直接提取文件后缀,toLocaleLowerCase是为了兼容大小写格式的后缀(比如.JS和.js都可以被匹配) return path.extname(file).toLocaleLowerCase() === targetExtension.toLocaleLowerCase(); }); console.log(`后缀为${targetExtension}的文件总数:`, matchFiles.length); });
扩展用法
统计多个后缀的文件
如果需要同时统计多种类型的文件,比如同时统计.js和.ts文件,可以把后缀改为数组格式:
const fs = require('fs'); const path = require('path'); const targetDir = './your-folder-path'; // 要统计的后缀列表 const targetExtensions = ['.js', '.ts', '.jsx']; fs.readdir(targetDir, (err, files) => { if (err) { console.error('目录读取失败:', err); return; } const matchFiles = files.filter(file => { const currentExt = path.extname(file).toLocaleLowerCase(); return targetExtensions.map(ext => ext.toLocaleLowerCase()).includes(currentExt); }); console.log('符合要求的文件总数:', matchFiles.length); });
排除子目录的严谨统计方案
上述代码会把名称刚好匹配后缀的子目录也统计进去,如果需要只统计真实文件、排除子目录,可以给readdir添加withFileTypes参数直接判断文件类型:
const fs = require('fs'); const path = require('path'); const targetDir = './your-folder-path'; const targetExtension = '.js'; fs.readdir(targetDir, { withFileTypes: true }, (err, dirents) => { if (err) { console.error('目录读取失败:', err); return; } const matchFiles = dirents.filter(dirent => { // 先判断是文件而非目录,再匹配后缀 return dirent.isFile() && path.extname(dirent.name).toLocaleLowerCase() === targetExtension.toLocaleLowerCase(); }); console.log(`后缀为${targetExtension}的文件总数:`, matchFiles.length); });
内容的提问来源于stack exchange,提问作者Derezefen
相关产品推荐
相关产品推荐

