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);
。

浙公网安备 33010602011771号