1、遍历当前文件夹下所有文件

var fs = require(‘fs’);
 var path = require(‘path’);//解析需要遍历的文件夹,我这以E盘根目录为例
 var filePath = path.resolve(‘E:’);//调用文件遍历方法
 fileDisplay(filePath);/**
• 文件遍历方法
• @param filePath 需要遍历的文件路径
/
 function fileDisplay(filePath){
 //根据文件路径读取文件,返回文件列表
 fs.readdir(filePath,function(err,files){
 if(err){
 console.warn(err)
 }else{
 //遍历读取到的文件列表
 files.forEach(function(filename){
 //获取当前文件的绝对路径
 var filedir = path.join(filePath,filename);
 //根据文件路径获取文件信息,返回一个fs.Stats对象
 fs.stat(filedir,function(eror,stats){
 if(eror){
 console.warn(‘获取文件stats失败’);
 }else{
 var isFile = stats.isFile();//是文件
 var isDir = stats.isDirectory();//是文件夹
 if(isFile){
 console.log(filedir);
 }
 if(isDir){
 fileDisplay(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
 }
 }
 })
 });
 }
 });
 }

  • 2、把文件进行重命名;
• 
 fs.rename(oldPath, newPath, callback); //重命名文件或文件夹
 /*
• oldPath, 原目录/文件的完整路径及名;
• newPath, 新目录/文件的完整路径及名;如果新路径与原路径相同,而只文件名不同,则是重命名
• [callback(err)], 操作完成回调函数;err操作失败对象
 */
 var fs=require(‘fs’);
 var path=require(‘path’);
 var path1=path.resolve(’/test1’);
 var path2=path.resolve(’/test2’);
 fs.rename(path1,path2,function(err){
 if(err){
 console.error(err);
 return;
 }
 console.log(‘重命名成功’);
 });

  • 3、nodejs批量替换js/html文件内容
• 
 var fs = require(‘fs’)
 var path=require(‘path’);
 var filePath=path.resolve(__dirname+’/js’);
 //readdir方法读取文件名
 //readFile方法读取文件内容
 //writeFile改写文件内容
 fs.readdir(filePath, ‘utf8’, function (err,data) {
data.forEach(function(item, index) {
//console.log(item)
 fs.readFile(’./js/’+item,‘utf8’,function(err,files){
//console.log(files)
 var result = files.replace(/要替换的内容/g, ‘替换后的内容’);fs.writeFile('./js/'+item, result, 'utf8', function (err) {
 	     if (err) return console.log(err);
 	});

 })});
 });


4、nodejs批量复值文件;

let fs = require(‘fs’),
 src = ‘src’,
 dist = ‘dist’,
 args = process.argv.slice(2),//从数组第二个开始返回
 filename = ‘image’,
 index = 0;//执行命令错误提示
 if (args.length === 0 || args[0].match(’–help’)) {
 console.log(’–help\n \t-src 文件源\n \t-dist 文件目标\n \t-n 文件名\n \t-i 文件名索引\n’);
 return false;
 }args.forEach((item, i) => {
 if (item.match(’-src’)) {
 src = args[i + 1];//获取源文件文件夹名称
 } else if (item.match(’-dist’)) {
 dist = args[i + 1];//获取目标文件文件夹名称
 } else if (item.match(’-n’)) {
 filename = args[i + 1];//文件名
 } else if (item.match(’-i’)) {
 index = args[i + 1];//文件索引 从x开始
 }
 });fs.readdir(src, (err, files) => {//读取源文件目录
 if (err) {
 console.log(err);
 } else {
 console.log(dist);
 fs.access(dist, existing => {
 if (existing) {//如果dist文件夹不存在则新建文件夹
 fs.mkdir(dist, () => {
 copyFile(files, src, dist, filename, index);
 })
 } else {
 copyFile(files, src, dist, filename, index);
 }
 });
 }
 });function copyFile(files, src, dist, filename, index) {
 files.forEach(n => {
 let readFile,
 writeFile,
 arr = n.split(’.’),
 oldPath = src + ‘/’ + n,//老路径
 newPath = dist + ‘/’ + filename + index + ‘.’ + arr[arr.length - 1];//拼接文件后缀名 新路径
 fs.stat(oldPath, (err, stats) => {
 if (err) {
 console.log(err);
 } else if (stats.isFile()) {//判断是否是文件 执行复制移动操作
 readFile = fs.createReadStream(oldPath);
 writeFile = fs.createWriteStream(newPath);
 readFile.pipe(writeFile);//把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。
 }
 });
 index++;
 })
 }

使用方法:node xx -src imgdir -dist newImgDir -n newName- -i 1

xx:js文件;imgdir:需要重命名的图片的文件夹名;newImgDir:重命名以后存放图片的文件夹名
newName:新图片的前缀名;1:索引从1开始 可以自定义
5、fs.access()注意事项

var fs = require(“fs”);
 /*
 -----判断文件和目录是否存在;
 fs.access(path[, mode], callback);
 path:判断的文件名;
 callback:回调函数;
/
 fs.access("./wenjian.txt",function(err){
 // 文件和目录不存在的情况下;
 if(err.code == “ENOENT”){
 console.log(“文件和目录不存在”)
 }
 })
 /
 不建议在调用 fs.open() 、 fs.readFile() 或 fs.writeFile() 之前使用 fs.access() 检查一个文件的可访问性
 */
 //不建议使用:
 fs.access("./wenjian.txt",function(err){
 if(!err){
 console.log(“文件已经存在”);
 return;
 }
 fs.open("./wenjian.txt",function(err){
 console.log(err)
 })
 })


6、fs.stat和fs.fstat区别:

fs.stat操作:
 fs.stat(’./aa.js’, function(err, stats) {
 if (err) {
 throw err;
 }
 console.log(stats);
 });
 fs.fstat操作:
 fs.open(’./aa.js’, ‘a’, function(err, fd) {
 if (err) {
 throw err;
 }
 fs.fstat(fd, function(err, stats) {
 if (err) {
 throw err;
 }
 console.log(stats);
 });
 })


fs.stat接收的第一个参数是一个文件路径字符串

fs.fstat接收的是一个文件描述符;

内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件