Nodejs,中fs模块常用方法

  • Post author:
  • Post category:其他


常用的莫过于对文件的增删改查以及读取文件,慢慢的一个一个说。

对文件的读取,有同步读取和异步读取,同步读取如果文件过大会造成阻塞,而异步读取不会导致IO阻塞


先上异步读取的代码

let fs = require("fs");
 fs.readFile("images/bg5-4.png",function(err,data){//异步读取文件所有内容
     if(!err){
         console.log(data);//如果读取的是二进制文件,如图片,视频等,得到的是buffer对象。二进制数据
         
     }else{
         console.log(err);
         
     }
 })


再上同步读取的代码

let buff =fs.readFileSync("images/bg5-4.png",{flag:'a'});
//同步读取文件所有内容,后面flog 是设置文件系统标识的a代表 打开文件用于追加。
//如果文件不存在,则创建该文件。

如果发生读取失败了,还需要try {} catch (error) {}去记录错误处理错误,所以异步IO还是很有好处的。


写入文件的异步代码

let fs = require("fs");
 let data = fs.readFileSync("./images/bg5-4.png");
 fs.writeFile("./images/bg5.png",data,function(err){//异步写入文件,如果data是个buffer数据自动忽略encoding设置的字符类型
    if(!err){
        console.log("写入成功");//这里的如果成功err为null(fales),不成功则为错误信息
    }
    
     
     
     
 })


写入文件的同步代码

 fs.writeFileSync("./images/bj6.png",data,{flag:"w"})
//与异步的api相同。但是同步中没有回调函数,返回值为undefined。


读取某文件下所有文件目录名

let fs = require("fs");
 fs.readdir("./text",{encoding:"utf8",withFileTypes:false},function(err,data){
     if(!err){
         let brr = [];//用于存放目录名
        
         data.forEach(item =>{
            let arr= item.split(".");//遍历数据以.分割成小数组
                brr.push(arr[0]);//取数组下标为0的目录名
         })
         fs.writeFileSync("./dats.txt",JSON.stringify(brr));//把数据写到文件中
         console.log(brr);
         
     }else{
         console.log(err);
         
     }
 })


读取文件信息

var fs = require('fs');

fs.stat('dats.txt', function (err, stat) {
    if (err) {
        console.log(err);
    } else {
        // 是否是文件:
        console.log('isFile(是否为文件): ' + stat.isFile());
        // 是否是目录:
        console.log('isDirectory(是否为目录): ' + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log('size(文件大小kb): ' + stat.size);
            // 创建时间, Date对象:
            console.log('birth time(创建时间): ' + stat.birthtime);
            // 修改时间, Date对象:
            console.log('modified time(修改时间): ' + stat.mtime);
        }
    }
});