【www.bbyears.com--js教程】
例子1
此方法主要用到了 fs 模块中的 fs.readdirSync 、 fs.statSync , fs.readdirSync 用来读取目录下的文件和文件夹, fs.statSync 用来读取文件或文件夹的相关属性。
/** * 获取文件夹下面的所有的文件(包括子文件夹) * @param {String} dir * @param {Function} callback * @returns {Array} */ exports.getAllFiles = function (dir, callback) { var filesArr = []; dir = ///$/.test(dir) ? dir : dir + '/'; (function dir(dirpath, fn) { var files = Sys.fs.readdirSync(dirpath); exports.async(files, function (item, next) { var info = Sys.fs.statSync(dirpath + item); if (info.isDirectory()) { dir(dirpath + item + '/', function () { next(); }); } else { filesArr.push(dirpath + item); callback && callback(dirpath + item); next(); } }, function (err) { !err && fn && fn(); }); })(dir); return filesArr; }
说明
该方法返回的是所有文件的路径(相对于dir),其中传入的参数callback的参数为文件的真实路径,可以通过callback来对每个文件做处理。
例子2
此方法主要用到了 fs 模块中的 fs.readdirSync 、 fs.statSync , fs.readdirSync 用来读取目录下的文件和文件夹, fs.statSync 用来读取文件或文件夹的相关属性。
此方法需要用到上一篇文章讲到的 link JavaScript异步仿同步(控制流)的实现 。
代码
/** * 获取文件夹下面的所有的文件(包括子文件夹) * @param {String} dir * @param {Function} callback * @returns {Array} */ exports.getAllFiles = function (dir, callback) { var filesArr = []; dir = ///$/.test(dir) ? dir : dir + '/'; (function dir(dirpath, fn) { var files = Sys.fs.readdirSync(dirpath); exports.async(files, function (item, next) { var info = Sys.fs.statSync(dirpath + item); if (info.isDirectory()) { dir(dirpath + item + '/', function () { next(); }); } else { filesArr.push(dirpath + item); callback && callback(dirpath + item); next(); } }, function (err) { !err && fn && fn(); }); })(dir); return filesArr; }
说明
该方法返回的是所有文件的路径(相对于dir),其中传入的参数callback的参数为文件的真实路径,可以通过callback来对每个文件做处理。
var fs = require('fs') //遍历文件夹,获取所有文件夹里面的文件信息 /* * @param path 路径 * */ function geFileList(path) { var filesList = []; readFile(path,filesList); return filesList; } //遍历读取文件 function readFile(path,filesList) { files = fs.readdirSync(path);//需要用到同步读取 files.forEach(walk); function walk(file) { states = fs.statSync(path+'/'+file); if(states.isDirectory()) { readFile(path+'/'+file,filesList); } else { //创建一个对象保存信息 var obj = new Object(); obj.size = states.size;//文件大小,以字节为单位 obj.name = file;//文件名 obj.path = path+'/'+file; //文件绝对路径 filesList.push(obj); } } } //写入文件utf-8格式 function writeFile(fileName,data) { fs.writeFile(fileName,data,'utf-8',complete); function complete() { console.log("文件生成成功"); } } var filesList = geFileList("G:/nodejs"); filesList.sort(sortHandler); function sortHandler(a,b) { if(a.size > b.size) return -1; else if(a.size < b.size) return 1 return 0; } var str=''; for(var i=0;i
使用方法很简单:将 var filesList = geFileList(“G:/nodejs”); 将getFileList 的参数修改成你想要的路径,改变里面参数路径,即可以遍历文件夹的文件,并生成 一份文件