nodejs中的fs文件系统

其实早就想写这一篇文章了,为什么到现在才写?因为懒啊!
在这里插入图片描述
好了,不多说了,写这篇文章主要是想记个笔记,以后再写node程序的时候,如果用得上fs文件系统,可以过来copy,简直不要太爽!!当然了,我不可能把官网的东西都给拽过来,那样我还不如去官网直接看呢,还省劲儿,这篇文章主要是记录一些平时用得着的方法就可以了,都起开,我要开始装逼了!!!
首先要引进来模块!各位看官应该都会吧,如不会,请自行选择如下方法

const fs = require('fs');

1.读文件

let data = fs.readFileSync('1.js',{'encoding': 'utf8'});
data = eval('('+ data +')');//或者JSON.parse(data);

我个人比较喜欢同步操作的方法,顺序执行,它不香吗?

2.写文件

fs.writeFileSync('1.txt','你好,三哥,你真帅啊!',{'encoding': 'utf8'});
fs.writeFileSync('1.json',data,{'encoding': 'utf8'});

再补充一个JSON.stringify的参数的方法

JSON.stringify(value[, replacer [, space]])
JSON.stringify(data,null,10);

3.创建可读流和可写流并写入

//通过读取一个文件内容并将内容写入到另外一个文件中。
const fs = require('fs');
//创建一个可读流
let readerStream = fs.createReadStream('1.json');
//创建一个可写流
let writerStream = fs.createWriteStream('./2.json');
//管道读写操作
//读取1.json的内容,并将内容写入到2.json文件中
readerStream.pipe(writerStream);

4.判断一个文件是否存在

let isExist = fs.existsSync('./1.js');

如果结果为true,就是存在,如果结果为false就是不存在,很简单!

5.判断一个路径是否是文件夹

judgeDir(path){
    let stat = fs.lstatSync(path);
    let isDir = stat.isDirectory();
    return isDir;
}

直接贴一个方法吧,到时候直接封装,就行,返回true,就是文件夹,返回false,就不是文件夹

6.遍历文件夹

let arr = fs.readdirSync('./js');//同步真香!

在这里插入图片描述
遍历出来了,下面再贴一个,深度递归遍历一个目录的代码,我自己写的

//遍历
let tree = [];//定义一个树(空数组)
function mapDirs(dir){//这个是遍历目录文件的函数
    let myDirs = fs.readdirSync(dir);//首先先同步读出传入的目录,结果是一个数组
    if(myDirs.length > 0){//当读出来的目录数组的长度大于0时,说明底下是有子文件的
        if(tree.length == 0){//当tree开始是一个空数组时,先把最外层的文件全部push进去
            myDirs.forEach(item => {//遍历这个最外层文件的数组
                var start = fs.lstatSync('./'+item);//判断是不是文件夹;
                let startState = start.isDirectory();//判断是不是文件夹;
                tree.push({
                    id:'./'+item,//id为自己的路径
                    name:item,
                    isDir:startState,//把是不是文件夹的状态加进来,用来显示不同的小图标,比如文件夹还是文件的小图标
                    children:[]
                });
                let path;
                if(dir != './'){//假如不是最外层,需要把每一次的目录都要加/来和item拼成一个查询item的路径
                    path = dir + '/' + item;
                }else{//假如是最外层,就不用加/,因为'./' 自带斜杠
                    path = dir + item;
                }
                var stat = fs.lstatSync(path);//判断是不是文件夹;
                let state = stat.isDirectory();//判断是不是文件夹;
                if(state){//如果是文件夹的话,递归整个函数,继续把新生成的路径放进这个函数里面,进行递归查找
                    mapDirs(path);
                }
            })
        }else{//当tree开始不是一个空数组时
            myDirs.forEach(item => {
                mapTree(tree,dir,item);//先把传入的路径和整个树进行递归对比,如果id是一样的,那么就把这个item push进这个选项的children数组中
                let path;
                if(dir != './'){//假如不是最外层,需要把每一次的目录都要加/来和item拼成一个查询item的路径
                    path = dir + '/' + item;
                }else{//假如是最外层,就不用加/,因为'./' 自带斜杠
                    path = dir + item;
                }
                var stat = fs.lstatSync(path);//判断是不是文件夹;
                let state = stat.isDirectory();//判断是不是文件夹;
                if(state){//如果是文件夹的话,递归整个函数,继续把新生成的路径放进这个函数里面,进行递归查找
                    mapDirs(path);
                }
            })

        }
    }
}
//遍历tree
function mapTree(tree,id,item){//递归遍历tree数组,然后根据id判断把这个item push进这个选项的children数组中
    let path = id + '/' + item;
    let stat = fs.lstatSync(path);
    let state = stat.isDirectory();//判断是不是文件夹;
    for(let i = 0; i< tree.length;i++){
        if(tree[i].id == id){
            tree[i].children.push({
                id:id + '/' + item,//继续把路径当作id
                name:item,
                isDir:state,//把是不是文件夹的状态加进来,用来显示不同的小图标,比如文件夹还是文件的小图标
                children:[]
            })
        }else if(tree[i].children.length > 0){
            mapTree(tree[i].children,id,item);
        }
    }
}
注: 如果你想判断是不是空文件夹,那么直接遍历这个文件夹,如果数组为空,就是空的呗,如果不是空,那么就不是空文件夹呗!!!!!!

7.删除文件夹

fs.rmdirSync(url)

巴特,fs的这个删除文件夹有个巨坑,就是它只能删除空文件夹,只要里边有一个文件,哪怕是个0k的,都不允许删除,但是咱是干嘛的?程序员啊,自己造方法,让他递归遍历删除!哼哼!
在这里插入图片描述
话不多说,上代码

function delDir(url){
    let arr = fs.readdirSync(url);
    if(arr.length > 0){//说明有文件
        arr.forEach(item => {
            let stat = fs.lstatSync(url + "/" + item);
            let isDir = stat.isDirectory();
            if(isDir){//是文件夹
                delDir(url + "/" + item);
            }else{
                fs.unlinkSync(url + "/" + item);
            }
        })
    }else{//说明没有文件
        fs.rmdirSync(url);
    }
    if(fs.existsSync(url)){
        fs.rmdirSync(url)
    }
    console.log('删除' + url + '成功')
}

8.删除文件

这个就很easy了

fs.unlinkSync(url);

9.复制文件

fs.copyFileSync('./1.json','./3.json');

就先写到这里吧,以后有方法再补充!以后可以来这里复制了,咯咯咯!

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值