JavaScript没有操作文件的能力,但是Node可以。Node提供了一个操作文件系统的模块,这个模块在Node中非常重要,也是经常用到的。模块是必须绝对掌握的模块系统。fs模块提供了很多接口,这里介绍一些常用的接口。1.常用API快速回顾fs.stat检测是文件还是目录constfs=require('fs')fs.stat('hello.js',(error,stats)=>{if(error){console.log(error)}else{console.log(stats)console.log(`file:${stats.isFile()}`)console.log(`directory:${stats.isDirectory()}`)}})文件系统。mkdir创建目录constfs=require('fs')fs.mkdir('logs',error=>{if(error){console.log(error)}else{console.log('目录创建成功!')}})fs.rmdir删除目录constfs=require('fs')fs.rmdir('logs',error=>{if(error){console.log(error)}else{console.log('成功删除目录logs')}})fs.writeFile创建写入文件constfs=require('fs')fs.writeFile('logs/hello.log','Hello~\n',error=>{if(error){console.log(error)}else{console.log('成功写入文件');}})fs.appendFileappendfileconstfs=require('fs')fs.appendFile('logs/hello.log','hello~\n',error=>{if(error){console.log(error)}else{console.log('成功写入文件');}})fs.readFile读取文件constfs=require('fs')fs.readFile('logs/hello.log','utf-8',(error,data)=>{if(error){console.log(error)}else{console.log(data);}})fs.unlink删除文件constfs=require('fs')fs.unlink(`logs/${file}`,error=>{if(error){console.log(error)}else{console.log(`成功删除文件:${file}`)}})fs.readdir读取目录constfs=require('fs')fs.readdir('logs',(error,files)=>{if(error){console.log(error)}else{console.log(files);}})fs.rename重命名,也可以更改文件存放路径constfs=require('fs')fs.rename('js/hello.log','js/greeting.log',error=>{if(error){console.log(error)}else{console.log('re命名为成功')}})2.第三方npm包mkdirp的使用mkdirp不仅可以创建文件夹,还可以创建多层文件夹,类似于mkdir-p命令midir-ptmp/foo/bar/baz的以上命令还可以在当前目录下创建多层文件夹以下代码在当前目录下生成多级文件夹constmkdirp=require('mkdirp')mkdirp('tmp/foo/bar/baz').then(made=>console.log(`Createdirectoryat:${made}`))//创建目录在:/Users/zhangbing/github/CodeTest/Node/fs/tmpResult3.实战示例实战1判断服务器上是否有上传目录。如果没有,创建这个目录,如果有,什么也不做constfs=require('fs')constpath='./upload'fs.stat(path,(err,data)=>{if(err){//执行创建目录mkdir(path)return}if(data.isDirectory()){console.log('上传目录存在');}else{//先删除文件,再执行创建目录fs.unlink(path,err=>{if(!err){mkdir(path)}})}})functionmkdir(dir){fs.mkdir(dir,err=>{if(err){console.log(err);return}})}实战2wwwroot文件夹下有图片cssjs和index.html,找到wwwroot目录下的所有目录,然后用同步的方式放到一个数组中constfs=require('fs')constpath='./wwwroot'constdirArr=[]constdirs=fs.readdirSync(path)dirs.forEach(item=>{if(fs.statSync(path+'/'+item).isDirectory()){dirArr.push(item)}})console.log('dirArr',dirArr)//dirArr['css','images','js']使用异步/等待方法constfs=require('fs')constpath='./wwwroot'constdirArr=[]functionisDir(path){returnnewPromise((resolve,reject)=>{fs.stat(path,(error,stats)=>{if(error){console.log(error)reject(error)return}if(stats.isDirectory()){resolve(true)}else{resolve(false)}})})}functionmain(){fs.readdir(path,async(error,data)=>{if(error){控制台.log(error)return}else{for(leti=0;i
