目录
一、操作文件夹
1. 删除文件夹
1.1 异步删除文件夹
rmdir("filepath"[,option],callback)
filepath 文件夹路径地址
当要删除的文件夹内部有其它文件夹时,需要添加参数option,否则报错。
option 定义文件夹删除参数 {recursive:true}
例:
fs.rmdir("./test",{recursive:true},(err,data) => {
console.log(err,data);
})
1.2 同步删除文件夹
rmdirSync("filepath"[,option],callback)
上述方法在node14.14后被废弃,需要使用新方法fs模块;
1.3 异步删除文件夹
fs.rm("./test",{recursive:true},() =>{});
1.4 同步删除文件夹
fs.rmSync("./test",{recursive:true});
2. 读取文件夹内部目录
2.1 异步读取文件夹内部目录
readdir("filepath",callback)
只能读取子代文件或文件夹:
fs.readdir("./test",(err,data) => {
console.log(err,data);
});


2.2 同步读取文件夹内部目录
const dir = fs.readdirSync("./test");
3. 判断文件或者文件夹是否存在或者查看文件信息
方法一:
fs.stat("./day01.js", (err, data) => {
console.log(err, data);
});

方法二:
const stat = fs.statSync("./day01.js");
console.log(stat);

方法三:
const stat = fs.existsSync("./day01.js"); //常用(返回布尔值)
console.log(stat);

4. 修改文件夹名
4.1 异步修改文件夹名
rename(filePathSuffix,renameFilePathSuffix,callback)
filePathSuffix 要修改文件或者文件夹地址
renameFilePathSuffix 修改后的文件或者文件名的地址
例:将c.txt改为a.txt文件:
fs.rename("./c.txt","./a.txt",(err,data) =>{
console.log(err,data);
});

4.2 同步修改文件夹名
fs.renameSync("./c.txt","./a.txt");
5. 监听文件或者文件夹
5.1 异步监听文件或者文件夹
方法一:
fs.watch("./test",(type,data) =>{
console.log("type:", type);
console.log("data:", data);
});
callback :type—对监听文件做修改的类型 data—监听的文件
例:在所监听的文件里面输入内容并保存,终端会输出监听的相关信息。
fs.watch("./test", (type, data) => {
console.log("type:", type);
console.log("data:", data);
});


方法二:
fs.watchFile("./test.js", (next, prev) => {
console.log("修改后的文件信息:", next);
console.log("修改前的文件信息:", prev);
})


6. 总结
总结:
异步方法都要添加callback才不会报错, 回调函数第一个参数是err,第二个参数是data;
同步不需要添加回调函数就可执行。
二、读取和写入
1.一次性读取写入
例:将test文件夹下的test.js中的内容写入train文件夹下的train.js文件中:
fs.readFile("./test/test.js", (err, data) => {
fs.writeFile("./train/train.js", data, () => {
console.log("写入成功");
});
});
2.可读可写流
**创建可读流 :**createReadStream(“文件路径”)
const read = fs.createReadStream("./train/train.js");
输出read的内容为:

可读流的状态: null 没有读取数据, true 在正在读取数据, false 一般是在读取完毕之后手动关闭。
开启可读流:
read.resume();
输出查看是否开始读取数据:
console.log(read.readableFlowing);

输出true 表示正在读取数据。
创建可写流: createWritesStream(“写入的文件地址及后缀”)
const writes = fs.createWriteStream("./test/test.js");
开始写入:
管道自动执行 pipe(“buffer” 字符串 )
read.pipe(writes);
内部具体过程:
可读流读取的时候会触发data事件和end事件:
let sss = "";
read.on("data", (value) => {
sss += value
});
read.on("end", () => {
writes.write(sss)
});
可读可写流可简写为:
const read = fs.createReadStream("./train/train.js");
const writes = fs.createWriteStream("./test/test.js");
read.pipe(writes);
3.数据存储
使用可写可读进行数据存储,不放在数据库中。
创建一个测试的json文件:
{
"name": "13",
"age": "14"
}
fs.readFile("./test/test.json", (err, data) => {
let json = JSON.parse(data.toString())
console.log(json);
})

4.创建工程目录
创建一个public.js文件:
该文件表示我们要创建的文件夹信息及内部文件。
const public = {
pathNameDir:"LuoXiaobin", // 最大文件夹
children:[ // 子级文件目录
{
type:"dir", // 要生成文件夹:type表示是文件夹还是文件---dir表示文件夹,其他表示文件
name:"luo", // 文件夹名或者文件名
},
{
type: "css", // css文件
name: "xiao" // 文件名
},
{
type: "js",
name: "bin"
},
{
type: "html",
name: "YY"
},
{
type: "dir",
name: "DS"
}
]
};
// 第一步创建最大文件夹
let createPublic = (public)=>{
fs.mkdir(public.pathNameDir,()=>{}); // 创建文件夹
//第二步创建主文件夹的内部文件
public.children.forEach(item=>{
// if(item.type === "dir"){ // 判断type值是dir就需要创建文件夹
// // 创建文件夹:item.name
// fs.mkdir(public.pathNameDir + "/"+item.name,()=>{})
// }else { // type不是dir创建文件
// fs.writeFile(public.pathNameDir + "/"+item.name + "." + item.type ,"", ()=>{})
// }
item.type === "dir" ? fs.mkdir(public.pathNameDir + "/"+item.name,()=>{}) : fs.writeFile(public.pathNameDir + "/"+item.name + "."+ item.type ,"", ()=>{})
})
};
createPublic(public);
成功创建目录及其内部的文件:

5.总结
//重点记忆
// readfile writeFile unlink mkdir rmdir rm rename readdir existsSync
// const read = fs.createReadStream("./12/index.css");
// const writes = fs.createWriteStream("./123/666.css");
// read.pipe(writes);
//删除文件夹
// fs.rmdir("文件地址","回调函数");
// fs.rm("文件地址","回调函数");
// readdir("文件夹地址","回调函数"); //读取文件夹
// rename("要修改的文件夹或文件地址及名称","修改之后文件夹或文件地址及名称","回调函数");
// stat("文件夹地址,","回调函数") ; // 判断文件是否存在 查询信息
// watch("文件夹,文件","回调函数") ; // 监听文件夹 或文件名 回调函数 一个触发的事件 一个触发事件的文件
// watchFile("文件夹,文件夹","回调函数") ; // 监听文件夹 或文件名 回调函数 修改之后的文件信息 修改文件前的信息
// existsSync("文件夹文件地址"); // 判断文件是否存在
//管道(缓存)
// const read = fs.createReadStream("./12/index.css");
// const writes = fs.createWriteStream("./123/666.css");
// read.pipe(write);
本文详细介绍了在Node.js中异步和同步操作文件夹的方法,包括删除、读取目录、判断文件、修改名字和监听文件。同时涵盖了文件读写、流处理、数据存储以及工程目录创建的实例。
660

被折叠的 条评论
为什么被折叠?



