class02:fs模块对文件夹的基础操作

本文详细介绍了在Node.js中异步和同步操作文件夹的方法,包括删除、读取目录、判断文件、修改名字和监听文件。同时涵盖了文件读写、流处理、数据存储以及工程目录创建的实例。

一、操作文件夹

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);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laker 23

要秃啦,支持一下嘛~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值