nodejs 核心模块中的 fs文件系统

在 nodejs 中, fs 模块为我们提供了目录和文件的创建,删除,以及读写操作。同时操作文件提供了同步和异步的方式,例如:

读取文件的内容的函数
同步:fs.readFileSync(path[, options])
异步:fs.readFile(path[, options], callback)

但是在实际的开发中,我们更多的还是使用异步来进行开发,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

注意,在使用fs模块前,必须要先导入此模块

const fs = require('fs');

操作文件

1、文件的写入
const fs = require('fs');
fs.writeFile('./test.txt','this is a test',function(err){
    if(err) throw err;
})

这里传入的第一个参数,如果存在该文件,就会将第二个参数的内容写进去(如果里面有内容,会被覆盖,并不是增加,如果要增加,后面的方法会说到);如果不存在该文件,则会自动创建该文件并写入第二个参数的内容

2、文件的追加
const fs = require('fs');
fs.appendFile('./test.txt','hello,nodejs',function(err){
    if(err) throw err;
})

这里是对 test.txt 文件的内容追加

在这里插入图片描述

3、文件的读取
const fs = require('fs');
fs.readFile('./test.txt',function(err,data){
    if(err) throw err;
    console.log(data.toString());
})

//<Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74 68 65 6c 6c 6f 2c 6e 6f 64 65 6a 73>

这里要注意,返回的文件内容是 Buffer 类二进制数据流,需要使用toString() 方可看到真是内容,或者在第一个参数后面再添加一个参数:’ utf8 ’

4、文件的复制
const fs = require('fs');
fs.copyFile('./test.txt','./test2.txt',(err)=>{
    if(err) throw err
})

这里会将 test.txt 中的内容复制到 test2.txt 中
在这里插入图片描述

5、文件的删除
const fs = require('fs');
fs.unlink('./test.txt',(err)=>{
    if(err) throw err;
})
6、获取文件信息
const fs = require('fs');
fs.stat('./test.txt',(err, status)=>{
    if(err) throw err;
    console.log(status);   //拿到一个文件的具体信息
});

拿到文件信息对象后,下面有两个方法比较常用:

  • isFile:判断是否为文件
  • isDirectory:判断是否为目录

操作目录

1、目录的创建
const fs = require('fs');
fs.mkdir('./demo',(err)=>{
    if(err) throw err;
})

这里就在同一级上创建了一个名为 demo 的目录

2、目录的读取
const fs = require('fs');
fs.readdir('./',(err,files)=>{
    if(err) throw err;
    console.log(files);  
})

这里需要注意的是,files 是以一个数组的形式输出 ./ 下一级的所有文件或目录,无法获取更深一层的文件或目录

那么如何去读取一个目录里面所有的文件?
这里需要使用到递归。首先判断当前项目是否为文件,如果是文件,打印出来,如果是目录继续递归进入目录,继续进行判断,代码如下:

const fs = require('fs');
const path = require('path'); // nodejs 里面的一个内置,专门处理路径相关
const showFile = function(dir){
    // 首先第一步,通过 fs.readdir 方法来读取这个目录
    fs.readdir(dir,(err,files)=>{
        if(err) throw err;
        files.forEach(file=>{
            // 首先要获取到该文件的绝对路径
            let filedir = path.join(dir,file);
            fs.stat(filedir,(err,stat)=>{
                if(err) throw err;
                if(stat.isFile()){
                    // 如果进入到 if,说明是文件,那么直接打印出来
                    console.log(file);
                } else {
                    // 如果进入到 else,说明是目录,继续调用函数
                    showFile(filedir);
                }
            })
        })
    })
}
showFile('./');
3、目录的删除
//这里全都是使用了同步的函数
function deleteDir(dir) {
    let files = fs.readdirSync(dir)   //读取目录demo,得到数组files
    files.forEach(function (file) {
        let filedir = path.join(dir, file);
        let stat = fs.statSync(filedir)  //得出node中的内容的各个状态
        if (stat.isFile()) {  
            fs.unlinkSync(filedir, (err) => {   //进入if,说明是文件,删除
                if (err) throw err;
            })
        }
        else {   
            deleteDir(filedir);   //进入else,说明是目录,继续调用函数
        }
    })
    fs.rmdirSync(dir);  //一层一层的删除空目录
}
deleteDir('./demo');

注意:目录里面如果有文件,系统是不允许你删除的,也就是说,只能删除空目录,所以这里又会用到递归

以上只是提供了一些常用的 fs 文件系统中的函数,fs 还有很多函数,具体可参见:fs 文件系统

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值