nodejs-fs模块

该文章以收录 《nodeJS探索之路》

本文所有练习已放入:https://github.com/webxiaoma/nodeJS-demos 的 file 文件夹中


前言

fs模块在nodeJS算是比较重要的模块了,本文主要讲的是nodejs 中fs模块的基础知识,目的是了解fs模块的大体作用。使用前先要引入fs模块,本文约定以const fs=require('fs')引入。详细的API请访问官网fs模块

同步和异步

fs模块中的方法一般的都有同步和异步的方法,例如读取文件

异步方法:

fs.readFile('./test.txt',(err,data)=>{
    if(err) throw err;
    console.log(data)
})

同步方法

let SyncFile = fs.readFileSync( './test.txt','utf-8');
cosnole.log(SyncFile);

一般同步方法是在异步方法名后面加上了Sync 一词。

文件处理

1.读取文件内容

fs.readFile(path[, options], callback)

参数:

  • path <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符。
  • options <Object> | <string>
    1. encoding <string> | <null> 默认为 null。
    2. flag <string> 默认为 ‘r’。
  • callback <Function>
    1. err <Error>
    2. data <string> | <Buffer>
fs.readFile('./test.txt',function(err,data){
    if(err){
        throw err;
    }
    console.log(data) 
    console.log(data.toString())
})

2.写入文件内容

fs.writeFile(file, data[, options], callback)异步地写入数据到文件,如果文件已经存在,则替代文件。

  • file <string> | <Buffer> | <integer> 文件名或文件描述符
  • data <string> | <Buffer> | <Uint8Array>
  • options <Object> | <string>
    1. encoding <string> | <null> 默认 = ‘utf8’
    2. mode <integer> 默认 = 0o666
    3. flag <string> 默认 = ‘w’
  • callback <Function>
fs.writeFile('./write.txt','test',err =>{
    if(err) throw err;
    console.log("写入成功");

    fs.readFile('./write.txt','utf-8',(err,data) =>{
        if(err) throw err;

        console.log('读取成功:'+ data);
    })
})

3.删除文件内容

fs.unlink(path, callback)

  • path <string> | <Buffer> | <URL>
  • callback <Function>
    1. err <Error>
fs.unlink('./delete.txt',err=>{
   assert.ifError(err);
   console.log('以删除文件:delete.txt')
})

4.追加文件内容
fs.appendFile(file, data[, options], callback)如果追加内容的文件不存在则,创建该文件

  • file <string> | <Buffer> | <number> 文件名或文件描述符
  • data <string> | <Buffer>
  • options <Object> | <string>
    1. encoding <string> | <null> 默认为 ‘utf8’
    2. mode <integer> 默认为 0o666
    3. flag <string> 默认为 ‘a’
  • callback <Function>
    1. err <Error>
fs.appendFile('./add.txt','追加的内容','utf8',(err)=>{
   assert.ifError(err);
   console.log(fs.readFileSync('./add.txt','utf8')) 
})

5.截取文件内容

在说截取文件内容之前,我们还要说一种打开文件,读取写入文件内容的方法

打开文件: fs.open
读取文件内容: fs.read
写入文件内容:fs.write
关闭文件:fs.close

他们和readFilewriteFile的区别就是比较底层,fs.readfs.write需要依托fs.open, 打开文件得到文件句柄,然后基于文件句柄读写。实际上我们用的readFilewriteFile还是比较多。我们来看一个例子:

fs.open('./open.txt','a+',(err,fd)=>{
    if(err) throw err;
    console.log("文件以打开");

    let readBuffer = new Buffer.alloc(30);
    let writeBuffer = new Buffer.from(" add content")
    fs.write(fd,writeBuffer,0,writeBuffer.length,0,(err,bytesWritten,buffer)=>{
        if(err) throw err;

        console.log(`写入成功,写入的长度:${bytesWritten}, 写入的内容:${buffer}`);
        //写入成功,写入的长度: 12, 写入的内容:add content

        fs.read(fd,readBuffer,0,30,0,(err, bytesRead, buffer)=>{
            if(err) throw err;
            console.log(bytesRead) // 17
            console.log(buffer.toString());// last add content

            // 关闭
            fs.close(fd);

         })


    })


})

我们这里说的截取文件内容的方法是基于fs.open方法的

fs.ftruncate(fd[, len], callback)

  • fd <integer>
  • len <integer> 默认 = 0
  • callback <Function>
    1. err <Error>
let fd = fs.openSync('open.txt','r+');

fs.ftruncate(fd,5,(err)=>{
    assert.ifError(err);
    console.log("截取内容为:" +fs.readFileSync('open.txt','utf-8'));
    //截取内容为:last
     fs.close(fd);
});
目录操作

1.创建目录

如果文件已经存在,会报错

fs.mkdir('./newdir',function(err){

    if(err) throw err
    console.log("make dir success")
})

2.读取目录

fs.readdir('./newdir',(err,files)=>{
     if(err) throw err;
     // files 是一个数组
     console.log(Array.isArray(files))
     console.log("读目录取成功:"+ files);
})

3.删除目录

删除目录时,如果目录不是空的将会报错

fs.rmdir('./delete_dir',function(err){
   if(err) throw err;
   console.log('delete dir success')

})
读取文件的常用模式

mode 用于创建文件时给文件制定权限,默认0666

flag:

'r' -   以读取模式打开文件。
'r+' - 以读写模式打开文件。
'rs' - 使用同步模式打开并读取文件。指示操作系统忽略本地文件系统缓存。
'rs+' - 以同步的方式打开,读取 并 写入文件。
//注意:这不是让fs.open变成同步模式的阻塞操作。如果想要同步模式请使用fs.openSync()。

'w' - 以读取模式打开文件,如果文件不存在则创建
'wx' - 和 ' w ' 模式一样,如果文件存在则返回失败
'w+' - 以读写模式打开文件,如果文件不存在则创建
'wx+' - 和 ' w+ ' 模式一样,如果文件存在则返回失败

'a' - 以追加模式打开文件,如果文件不存在则创建
'ax' - 和 ' a ' 模式一样,如果文件存在则返回失败
'a+' - 以读取追加模式打开文件,如果文件不存在则创建
'ax+' - 和 ' a+ ' 模式一样,如果文件存在则返回失败
结束

详细API 请访问node官网

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值