Node.js之fs模块

// fs 模块中带Sync的方法为同步方法

// 使用fs模块一般会使用到路径,配合path模块共同使用

导入path模块

const path = require("path");

导入fs模块

const fs = require("fs");

// console.log(fs); 

/* 

    01-读文件 readFile

    fs.readFile(path,回调函数)

    node中一般遵循错误先行,回调函数第一个参数为 err

    注意:读文件的路径一定要完整

*/

异步读取(推荐使用)

 fs.readFile(path.resolve(__dirname,"./source/doc.txt"),(err,data)=>{

     // 如果有错误抛出错误

     if(err) throw err

     console.log(err);

     console.log(data.toString());

})

同步读取(不推荐使用)

 let res = fs.readFileSync(path.resolve(__dirname,"./source/doc.txt"))

 console.log(res);


 

/* 

    02-写文件 writeFile:将指定内容写入文件

    fs.writeFile(

        path,

        要写入的内容,

        {   

            // 实际可以不用写这个参数,默认为utf-8,w模式

            encoding:"utf-8",

            flag:"w"  // 写文件的模式。w:覆盖内容;a:追加内容

        },

        回调函数

    )

    注意:如果指定路径不存在,会先创建文件,再进行写入

*/

 fs.writeFile(

     path.resolve(__dirname,"./source/doc.txt"),

     "今天想吃蛋炒饭",

     {

         encoding:"utf-8",

         flag:"w"

     },

     (err)=>{

         if(err) throw err

         console.log("写入成功");

     }

 )



// 一般写以下这种

 fs.writeFile(path.resolve(__dirname,"./source/yangr.txt"),"今天想吃蛋炒饭",(err)=>{

         if(err) throw err

         console.log("写入成功");

     }

 )


 

写入图片

// 先读取图片信息才能进行写入

// 读取图片

 let imgdata = fs.readFileSync(path.resolve(__dirname,"./source/1.png"))

 console.log(imgdata);

// 写入图片

 fs.writeFile(path.resolve(__dirname,"11.png"),imgdata,(err)=>{

     if(err) throw err

     console.log("写入图片成功");

 })


 

判断文件是否存在 existsSync

console.log(fs.existsSync(path.resolve(__dirname,"./source/1.png")));


 

操作(创建)文件夹(目录)

// 路径指向存在该目录,再创建同名目录会报错

 fs.mkdir(path.resolve(__dirname,"./bin"),0o777,(err)=>{

     if(err) throw err

     console.log("创建目录成功");

 })

读目录返回该目录下的子文件和子目录的名称

 fs.readdir(path.resolve(__dirname,"./source"),(err,info)=>{

     if(err) throw err

     console.log(info);

 })

判断是文件还是文件夹

 fs.readdir(path.resolve(__dirname,"./source"),(err,arr)=>{

     if(err) throw err

     arr.forEach(v=>{

         fs.stat(path.resolve(__dirname,"./source",v),(err,stats)=>{

             if(stats.isFile()){

                 console.log(v+"是文件");

             }else{

                 console.log(v+"是文件夹(目录)");

             }

         })

     })
 })

删除文件

 fs.unlink(path.resolve(__dirname,"./source/1.png"),err=>{

     if(err) throw err

     console.log("删除成功");

 })

删除文件夹

 fs.rmdir(path.resolve(__dirname,"./bin"),err=>{

     if(err) throw err

     console.log("删除文件夹成功");
 })

重命名文件

fs.rename(

    path.resolve(__dirname,"./source"),

    path.resolve(__dirname,"./source1"),

    (err)=>{

        if(err) throw err

        console.log("修改成功");

    }

)

监听文件的变化(热更新

const fs = require("fs");

 fs.watchFile("./1.txt",(curr,prev)=>{

     // console.log(curr,"--------",prev);

     console.log("修改了文件");

     fs.unwatchFile("./1.txt"); // 移除对该文件的监听(注意:要在监听文件方法里面使用)

 }) 

读文件,写文件有时会遇到大文件,此时readFile,writeFile就已经不再适用,它们只适合读写小文件,是一次性全部读完文件,再把读到的文件数据放到缓存里,以供后续的操作

// 创建可读流(用流的方式来读文件)
 let readStream = fs.createReadStream("./dpcq.txt");
// 监听可读流读数据的过程
 readStream.on("data",data=>{
     console.log(data);
     console.log("------------------------------------");
 })
// 数据全部读取完会触发
 readStream.on("end",()=>{
     console.log("数据全部读取完毕");
 })


 let readStream = fs.createReadStream("./dpcq.txt");
 let writeStream = fs.createWriteStream("./yr.txt",{encoding: "utf8"});
 readStream.on("data",data=>{
     // 将读到的内容写入到目标文件
     writeStream.write(data);
 })
 // 全部读取完毕触发
 readStream.on("end",()=>{
     writeStream.end(); // 结束写入
     console.log("写入成功");
 })

// 用管道 pipe 可以简化以上的读写操作(推荐使用)
fs.createReadStream("./dpcq.txt").pipe(fs.createWriteStream("./yr.txt"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值