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 | | | 文件名或文件描述符。
  • options |
    1. encoding | 默认为 null。
    2. flag 默认为 ‘r’。
  • callback
    1. err
    2. data |
  • 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 | | 文件名或文件描述符
    • data | |
    • options |
      1. encoding | 默认 = ‘utf8’
      2. mode 默认 = 0o666
      3. flag 默认 = ‘w’
    • callback
    • 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 | |
      • callback
        1. err
      fs.unlink('./delete.txt',err=>{
         assert.ifError(err);
         console.log('以删除文件:delete.txt')
      })

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

      • file | | 文件名或文件描述符
      • data |
      • options |
        1. encoding | 默认为 ‘utf8’
        2. mode 默认为 0o666
        3. flag 默认为 ‘a’
      • callback
        1. err
      • 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
        • len 默认 = 0
        • callback
          1. err
        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官网

        你可能感兴趣的:(node)