nodejs读取文件夹,路径信息,文件数据常用方法总结

发布于:2020-03-26 10:50:45

一、读取文件夹,同步读取fs.readdirSync和异步读取fs.readdir

以当前工作目录下有个data文件夹为例:

读取文件夹

data.json:


{
    "name": "小明",
    "age": 22
}
const fs = require("fs");
const path = require("path");
const filePath = path.join(__dirname,"data");
console.log('filePath:',filePath);
/*同步方法读取文件夹*/
const files = fs.readdirSync(filePath);
console.log('files:',files);
//返回一个数组:[ 'data.json' ]

/*异步方法读取文件夹*/
fs.readdir(filePath,function(err,files){
    if(err){
        console.log('err:',err);
        throw new Error(err);
    }
    console.log("files:",files);
});

二、读取路径信息,同步读取fs.statSync和异步读取fs.stat

/*
 不建议在调用 fs.open()、 fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查文件是否存在。
 而是应该直接打开、读取或写入文件,如果文件不可用则处理引发的错误。
 要检查文件是否存在但随后并不对其进行操作,则建议使用 fs.access()。
 * */
const oPath = fs.statSync(filePath);//同步读取
fs.stat(filePath,(err,stats)=>{
    //该路径信息
    console.log(stats);//跟oPath一样,常用stats.isFile(),stats.isDirectory()判断是文件还是文件夹

});

三、读取文件数据,同步读取fs.readFileSync和异步读取fs.readFile

结合读取文件夹和读取路径信息综合来演示:

const files = fs.readdirSync(filePath);//读取文件夹
console.log('files:',files);//data文件夹的所有文件: [ 'data.json' ]

files.forEach((file)=>{
    /*同步读取文件数据readFileSync*/

    const oPath = fs.statSync(path.join(filePath,file));//获取当前路径信息
    if(oPath.isFile()){
        const data = fs.readFileSync(path.join(filePath,file));//读取当前文件数据
        /*
         * 默认返回buffer <Buffer 7b 0d 0a 09 22 6e 61 6d 65 22 3a 20 22 e5...
            如果传第二个参数为:"utf8",则返回字符串。第二个参数也可以传对象encoding <string> 默认值: 'utf8'。withFileTypes <boolean> 默认值: false。
            const data = fs.readFileSync(path.join(filePath,file),"utf8");
        */
        console.log('data:',data);//<Buffer 7b 0d 0a 09 22 6e 61 6d 65 22 3a 20 22 e5...
        let originDataStr = data.toString();//buffer转字符串
        console.log(typeof originDataStr,originDataStr);//string {"name": "小明","age": 22}
        const originDataJson = JSON.parse(originDataStr);//字符串对象转对象
        console.log(typeof originDataJson,originDataJson);//object { name: '小明', age: 22 }    
    }else{
        console.log("不是文件");
    }

    /*异步读取文件数据*/

    fs.readFile(path.join(filePath,file),(err,data)=>{
        console.log(data);
    });
})
评论

点赞

收藏

0/500 字数

发布

取消