。
/** * fs.stat 检测是文件还是目录 * fs.mkdir 创建目录 * fs.writeFile 创建写入文件 * fs.appendFile 追加文件 * fs.readFile 读取文件 * fs.readdir 读取目录 * fs.rename 重命名 * fs.rmdir 删除目录 * fs.unlink 删除文件 */ const fs = require('fs'); // 1、fs.stat 检测是文件还是目录 fs.stat('./html',(err,data) => { if(err){ console.log(err); } console.log(`是文件:${data.isFile()}`); console.log(`是目录:${data.isDirectory()}`); }) // 2、fs.mkdir 创建目录 /** * path 将创建的目录路径 * mode 目录权限(读写权限) 默认777 * callback 回调,传递异常参数 */ fs.mkdir("./css",err => {//在上传文件时 执行这一段,没有这个目录的话就创建,如果有,就会报错 if(err){ console.log(err); return; } console.log("创建成功"); }) //3、fs.writeFile 创建写入文件 /** * filename (String) * data (String|Buffer) *options (Object) option数组对象包含: .encoding (String) 可选值 默认'utf8' 当data使用buffer时,该值应该为 .mode (Number) 文件读写权限,默认值 438 .flag (String) 默认值'w' .callback{Function} 回调,传递一个异常参数err */ fs.writeFile("./html/index.html","你好nodejs",err => {//在html目录创建并写入index.html 写入内容是 你好nodejs 如果文件已经存在则替换此文件 if(err){ console.log(err); return; } console.log("创建文件写入成功"); }) //4、fs.appendFile 追加文件 fs.appendFile("./css/base.css","body{color:red} ",err => {//在文件内追加内容,而不是替换,如果没有此文件也会创建文件 if(err){ console.log(err); return; } console.log("appendFile成功"); }) // 5、fs.readFile 读取文件 fs.readFile("./html/index.html",(err,data) => {//读取html目录下的index.html文件 读取到的data格式为 buffer类型 if(err){ console.log(err); return; } console.log(data); console.log(data.toString());//buffer类型转换为字符串 }) // 6、fs.readdir 读取目录 fs.readdir("./html",(err,data) => {// 读取目录里的文件 目录页可以读取出来 if(err){ console.log(err); return; } console.log(data); }) // 7、fs.rename 重命名 功能 1、重命名 2、移动文件 fs.rename("./css/aaa.css","./html/cc.css",err => {//将css目录下的aaa.css文件改名为cc.css 如果路径不一样就相当于移动并改名 if(err){ console.log(err); return; } console.log("重命名成功"); }) // 8、fs.rmdir 删除目录 fs.rmdir("./html/aaa",err => {//如果目录中有文件则不能删除 会报错 if(err){ console.log(err); return; } console.log("删除目录成功"); }) // 9、fs.unlink 删除文件 fs.unlink("./html/aaa/index.html",err => { if(err){ console.log(err); return; } console.log("删除文件成功"); })
两道小题:
1.判断服务器上有没有upload目录,如果没有创建这个目录,如果有的话不做操作。(图片上传)
const fs = require('fs') // 1.判断服务器上有没有upload目录,如果没有创建这个目录,如果有的话不做操作。(图片上传) let path = "./upload" fs.stat(path,(err,data) => { if(err){ mkdir(path) return; } if(data.isDirectory()){ console.log("已有upload目录"); }else{ // 如果存在upload文件,需要先删除upload文件,再创建upload目录, fs.unlink(path,err => { if(!err){ mkdir(path) }else{ console.log("创建失败"); } }) } }) // 创建目录 function mkdir(dir){ fs.mkdir(dir,err => { console.log(err); if(!err){ console.log("创建成功"); }else{ console.log("创建失败"); } return; }) }
2.wwwroot文件夹下面images css js 以及index.html,找出wwwroot目录下面的所有目录,然后把它放在一个数组中。
1、递归实现
let path2 = "./wwwroot",dirArr = [];
// 1、递归实现 fs.readdir(path2,(err,data) =>{ if(err){ console.log(err); return; } console.log(data); (function getDir(i){ console.log(i,"i"); if(i == data.length) { console.log(dirArr,"dirArr"); return; } fs.stat(path2+"/"+data[i],(error,stats) => { if(!error){ if(stats.isDirectory()){ dirArr.push(data[i]) } getDir(i+1); } }) })(0);//自执行函数 })
2、async await 实现
// 1、 定义一个isDir方法判断一个资源是目录还是文件 async function isDir(path){ return new Promise((resolve,reject) => { fs.stat(path,(error,stats) => { if(error){ console.log(error); reject(error) return; } if(stats.isDirectory()){ resolve(true) }else{ resolve(false) } }) }) } // 2、获取wwwroot里的所有资源 循环遍历 function main(){ let path = "./wwwroot" fs.readdir(path2,async (err,data) =>{ if(err){ console.log(err); return; } for(let i = 0; i < data.length; i++){ if(await isDir(path + '/' + data[i])){ dirArr.push(data[i]) } } console.log(dirArr); }) } main();
fs模块 读取流、写入流、管道流
读取流:
const fs = require('fs'); var readStream = fs.createReadStream("./data/input.text"); var count = 0; var str = ""; readStream.on('data',(data)=>{ str += data; count++; }) readStream.on('end',(data)=>{ console.log(str,"str"); console.log(count,"count"); }) readStream.on('error',(err)=>{ console.log(err,"err"); })
写入流:
const fs = require('fs'); var str = ''; for(let i = 0;i<500;i++){ str += "我是从数据库获取的数据,我要保存起来 "; } var writeStream = fs.createWriteStream("./data/output.text");//会自动生成文件 writeStream.write(str); // 标记写入完成 标记写入完成,才能监听写入完成事件(如果标记,则不会触发finish事件) writeStream.end(); // 监听写入完成事件 writeStream.on('finish',()=>{ console.log("写入完成"); })
管道流:
// 管道流 const fs = require('fs'); var readStream = fs.createReadStream("./data/img/a.jpg"); var writeStream = fs.createWriteStream("./data/b.jpg"); readStream.pipe(writeStream);
。