这个模块主要分为对文件和文件夹的操作,都包括创建、读取、删除等操作,而且其中的每一个函数都有其同步和异步的函数,只是其中的参数不同而已。
文件操作
创建文件
fs.writeFile("1.txt","hahaxixi",function(err){})
,如果有此文件则添加到内容到此文件中,默认添加方式是覆盖添加。可以设置参数{flag:"a"}
来决定是追加方式添加还是覆盖添加,a==>表示追加方式添加
,w==>表示覆盖方式添加
,r==>表示读取方式
。如果没有此文件,则自动创建一个1.txt
文件。
同步函数:fs.writeFileSync("1.txt","hahaxixilalanana")
。12345678var fs=require("fs");fs.writeFile("1.txt","xixihahalala",{flag:"a"},function(err){if(err){return console.log(err);}else{console.log("操作成功");}});追加文件内容
fs.appendFile("1.txt","hohohahaxixilala",function(err){})
,这个方法是向文件中添加内容,效果与上面的设置{flag:"a"}
一样。如果此文件不存在,则创建,否则添加内容。
同步函数:fs.appendFileSync("1.txt","hahaxixilalanana")
。读取文件内容
fs.readFile("1.txt",function(err,data){})
,这里值得一提的是读取文件的内容是buffer
数据格式,所以,要使用res.toString()
进行编码。
同步函数:fs.readFileSync("1.txt","hahaxixilalanana")
。12345678var fs=require("fs");fs.readFile("1.txt","xixihahalala",function(err,data){if(err){return console.log(err);}else{console.log("文件内容为:"+data);}});删除文件
fs.unlink("1.txt",function(err){})
,此函数删除文件。
同步函数:fs.unlink("1.txt")
。文件名的修改
fs.rename("1.txt","2.txt",function(err){})
,此方法用来修改文件的名字。
同步函数:fs.renameSync("1.txt","2.txt")
。所以自己可以封装一个复制文件的方法
mycopy(src,dest)
123function mycopy(src,dest){fs.writeFileSync(dest,fs.readFileSync(src));}
文件夹操作
创建文件夹
fs.mkdir("22",0777,function(err){})
,此方法创建一个名为22
的文件夹,第二个参数0777
为设置此文件夹的权限,四个数分别代表四种权限,每种权限都有三个等级,分别为1:执行权;2:写入权;4:读取权
,每种权限的等级为各个等级数相加,所以数字7
为最高权限。从左向右依次为0==》18进制;7==》管理者;7==》staff;7==》everyone
。
同步函数:fs.mkdirSync("22")
。1234567fs.mkdir("22",0777,function(err){if(err){console.log(err);}else{console.log("文件夹创建成功");}});文件夹重新命名
fs.rename("22","33",function(err){})
,此方法与文件的重命名用法一样。
同步函数:fs.renameSync("22","33")
。删除文件夹
fs.rmdir("22",function(err){})
,此方法只能删除空文件夹。
同步函数:fs.rmdirSync("22")
。读取文件夹操作
fs.readdir("22",function(err,data){})
,此方法可以读取文件夹的内容,返回的data
是一个数组形式的数据,数组里的每个元素是此文件夹中的文件名字或者文件夹的名字。
同步函数:fs.readdirSync("22")
。12345678fs.readdir("22",function(err){if(err){console.log(err);}else{console.log(data);//data=["1.txt","23","2.txt"];}});判断是文件夹还是文件
fs.stat("23",function(err,data){})
,这个方法主要用来判断23
这个名字在本路径下是一个文件夹还是文件,此函数的data.isFile()
判断是否是文件,否则就是文件夹。
同步函数:fs.statSync("23")
。1234567891011121314fs.stat("23",function(err,data){if(err){console.log(err);}else{console.log(data);if(data.isFile()){//是文件}else{//是文件夹}}});改变文件夹权限
fs.chmod("22",0377,function(err){})
,此函数就是通过改变权限等级来改变文件夹的权限。
同步函数:fs.chmodSync("23",0377)
。判断文件夹或者文件是否存在
fs.exists("22",function(err){})
,此函数用来判断这个名字的文件夹或者文件是否存在。第一个参数要是文件的名字要写清楚后缀,文件夹的名字直接写即可。若存在返回值exists
为true。
同步函数:fs.existsSync("22")
。所以自己可以封装一个删除文件夹的函数,注意删除文件夹函数
fs.rmdir()
只能删除空的文件夹,所以需要用到判断。12345678910111213141516function removeDir(src){//首先要先读取文件夹里的内容,如果是文件就直接删除,如果是文件夹就继续执行该函数var arr=fs.readdirSync(src);for(var i=0;i<arr.length;i++){var path=src+"/"+arr[i];var data=fs.statSync(path);if(data.isFile()){//是文件直接删除fs.unlinkSync(path);}else{//是文件夹,继续执行该函数removeDir(path);}}fs.rmdirSync(src);}
小练习:文件夹管理器
- 简单的练习:需求为:遍历当前路径下的所有文件夹以及文件,如果是文件夹可以点击进去遍历此文件夹里的文件夹以及文件,文件夹和文件可以直接删除。1234567891011121314151617181920212223242526272829303132333435363738394041var http=require("http");var fs=require("fs");var url=require("url");var remove=require("./file.js");var server=http.createServer(function(req,res){var urls=url.parse(req.url,true).query.urls;var delurls=url.parse(req.url,true).query.delurls;if(urls==undefined){var path=".";}else{var path=urls;}if(delurls!=undedfined){var data=fs.statSync(delurls);if(data.isFile()){fs.unlinkSync(delurls);}else{//引用上面的删除文件夹函数remove.removeDir(delurls);}}//渲染页面var arr=fs.readdirSync(path);res.write(`<table border="">`);res.write(`<tr><td>文件名</td><td>创建时间</td><td>操作</td></tr>`);for(var i=0;i<arr.length;i++){var purl=path+"/"+arr[i];var ress=fs.statSync(purl);var times=ress.ctime.getFullYear()+"年"+ress.ctime.getMonth()+1+"月"+ress.ctime.getDate()+"日";if(ress.isFile()){res.write(`<tr><td>${arr[i]}</td><td>创建时间</td><td><a href="/?delurls=${purl}">删除</a></td></tr>`);}else{res.write(`<tr><td><a href="/?urls=${purl}">${arr[i]}</a></td><td>创建时间</td><td><a href="/?delurls=${purl}">删除</a></td></tr>`);}}res.write(`</table>`);res.end();});server.listen(8989);
效果如图: