发布时间:2023-09-28 14:00
fs.stat
检测是文件还是目录const fs = require("fs")
fs.stat('./html', function(err, data){
if (err) {
console.log(err)
return;
}
console.log(`是目录:${data.isDirectory()}`); // 是目录:true
console.log(`是文件:${data.isFile()}`); // 是文件:false
})
fs.mkdir
创建目录mkdirp
这个三方模块进行递归创建多级目录/*
path 路径
mode 目录权限,默认777
callback 回调,传递异常参数err
*/
const fs = require("fs")
fs.mkdir('./css', (err)=>{
if (err) {
console.log(err)
return;
}
console.log("创建目录成功")
})
fs.writeFile
创建写入文件(自动创建)/*
filename (String) 文件名称
data (String | Buffer) 将要写入的内容,可以是字符串,也可以是buffer数据
options (Object) option数组对象
encoding (String) 可选, 'utf8', 当使用buffer时,应该为bytes
mode (Number) 文件读写权限,默认0o666
flag (String) 默认值 'w'
callback {Fuction} 回调,传递一个异常参数err
*/
const fs = require("fs")
fs.writeFile('./html/index.html', 'aaaaaaaa', (err) => {
if(err){
console.log(err);
return;
}
console.log("创建文件并写入成功")
})
fs.appendFile
追加写入文件(自动创建)const fs = require("fs")
fs.appendFile('./html/index.html', 'bbbbbbbbbb', (err)=>{
if(err){
console.log(err);
return;
}
console.log("文件追加写入成功")
})
fs.readFile
读取文件const fs = require("fs")
fs.readFile('./html/index.html', {}, function(err, data){
if(err){
console.log(err);
return;
}
// 将Buffer转换为String类型
console.log(data.toString());
})
fs.readdir
读取目录const fs = require("fs")
fs.readdir('./html', {}, function(err, data){
if(err){
console.log(err);
return;
}
console.log(data); // 当前目录下的文件列表数组
})
fs.rename
重命名const fs = require("fs")
fs.rename('./html/index.html', './html/index.js', function(err){
if(err){
console.log(err);
return;
}
console.log("文件重命名成功")
})
const fs = require("fs")
fs.rename('./html/index.html', './css/index.js', function(err){
if(err){
console.log(err);
return;
}
console.log("文件移动成功")
})
fs.rmdir
删除目录const fs = require("fs")
// 强制递归删除:opption: { recursive: true, force: true }
fs.rmdir('./demo2/html', (err) => {
if(err){
console.log(err);
return;
}
console.log("目录删除成功")
})
fs.unlink
删除文件const fs = require("fs")
fs.unlink('./demo2/html/index.js', function(err){
if(err){
console.log(err);
return;
}
console.log("文件删除成功")
})
fs.createReadStream
从文件流中读取数据const fs = require("fs")
var readStream = fs.createReadStream('./demo2/1.pptx');
var count = 0;
var str = '';
// 监听正在进行的
readStream.on('data', (data)=>{
str += data;
count++;
})
// 监听读取完成
readStream.on('end', ()=>{
console.log(count);
console.log(str);
})
// 监听异常
readStream.on('error', (err)=>{
console.log(err);
})
fs.createWriteStream
将文件流写入文件const fs = require("fs")
var str = ''
for (let index = 0; index < 500; index++) {
str += "我是测试数据,也请你尊重我";
}
var writeStream = fs.createWriteStream('./demo2/2.txt');
// 异步方法
writeStream.write(str);
// 标记写入完成,没有这个标记,则不能监听写入完成事件finish
writeStream.end();
writeStream.on('finish', function(){
console.log("写入完成");
})
writeStream.on('error', (err)=>{
console.log(err)
})
const fs = require("fs")
var readStream = fs.createReadStream('./demo2/1.gif');
var writeStream = fs.createWriteStream('./demo1/2.gif');
readStream.pipe(writeStream);
需求:在www
目录下有img、css、js
文件夹,和index.jpg、index.css、index.js
三个文件,获取www
目录下的文件夹和文件,分别输出两个列表
1.bug
写法
const fs = require("fs")
const path = require('path')
var dirLst = []
var fileLst = []
const dstPath = 'F:\\projects\\nodejs\\demo2\\www'
fs.readdir(dstPath, function(err, data){
if(err){
console.log(err);
return;
}
data.forEach(file => {
let currentFile = path.join(dstPath, file);
// fs模块中的方法都是异步方法,循环已经结束,它可能还没开始,所以push没有生效
fs.stat(currentFile, function(err, data){
if (err) {
console.log(err)
return;
}
if (data.isDirectory()) {
dirLst.push(file)
} else {
fileLst.push(file)
}
})
});
})
console.log(dirLst); // []
console.log(fileLst); // []
对比下面两个方法
for (var index = 0; index < 3; index++) {
setTimeout(()=>{
console.log(index);
}, 100)
} // 3
for (let index = 0; index < 3; index++) {
setTimeout(()=>{
console.log(index);
}, 100)
} // 1 2 3
2.递归处理
const fs = require("fs")
const path = require('path')
var dirLst = []
var fileLst = []
const dstPath = 'F:\\projects\\nodejs\\demo2\\www'
fs.readdir(dstPath, function(err, data){
if(err){
console.log(err);
return;
}
(function getDir(i){
let currentPath = path.join(dstPath, data[i])
fs.stat(currentPath, function(err, file){
if (err) {
console.log(err)
return;
}
if (file.isDirectory()) {
dirLst.push(data[i])
} else {
fileLst.push(data[i])
}
i += 1
if (i >= data.length) {
console.log(dirLst);
console.log(fileLst);
return;
}
getDir(i)
});
})(0)
})
3.nodejs里面的新特性(async、await
)
const path = require("path");
// 1.定义一个isDir的方法,判断一个资源到底是文件夹还是文件
async function isDir(path){
return new Promise((resolve, reject) =>
fs.stat(path, (err, obj) => {
if (err) {
console.log(err);
reject(err);
}
if (obj.isDirectory()){
return resolve(true);
} else {
return resolve(false);
}
})
)
}
// 2.获取www里面的所有资源,循环遍历
function getResouces() {
let dstPath = 'F:\\projects\\nodejs\\demo2\\www'
var dirArr = []
fs.readdir(dstPath, async function(err, objs){
if(err){
console.log(err);
return;
}
for (let index = 0; index < objs.length; index++) {
var result = await isDir(path.join(dstPath, objs[index]));
if (result) {
dirArr.push(objs[index]);
}
}
console.log(dirArr)
})
}
getResouces();