nodejs中fs文件模块使用demo
。
/**
* 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}\n",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("删除文件成功");
})
// 10、fs.existsSync(path)
同步判断 文件/目录 是否存在
if (fs.existsSync(path)) { do something }
两道小题:
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 += "我是从数据库获取的数据,我要保存起来\n"; } 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);
。