nodejs fs的操作

155 阅读3分钟

nodejs对文件的操作首先要先导入fs模块

const fs = require('fs')

文件写入

使用场景:1. 下载文件 2.安装文件 3.保存程序日志 4.编辑器保存文件 5.视频录制

方法同步/异步
writeFile异步
writeFileSync同步
appendFile异步
appendFileSync同步
(1)fs.writeFile (file, data[, options], callback)
  • options  | 

    • encoding  |  默认值:  'utf8'
    • mode  默认值:  0o666
    • flag  请参阅对文件系统 flags 的支持。 默认值:  'w'
    • signal  允许中止正在进行的写入文件

    当 file 是文件名时,将数据异步地写入文件,如果文件已存在则替换该文件。

        fs.writeFile('./美少女学习日记', '美少女学习第一天', err => {
      if (err) {
        throw err
        console.log('保存失败')
        return
      } else {
        console.log('保存成功')
      }
    })
    

    (2)fs.writeFileSync(file, data[, options]) options没有signal,因为同步不会被中止

        fs.writeFileSync('./美少女测试', '测试')
    

    (3)fs.appendFile(path, data[, options], callback) options也是没有signal,异步地将数据追加到文件,如果该文件尚不存在,则创建该文件。

        fs.appendFile('./美少女学习日记', '\r\n异步追加', err => {
        if (err) {
        console.log('保存失败')
        return
      } else {
        console.log('保存成功111')
      }
    })
    

    (4)fs.appendFileSync (path, data[, options])

        fs.appendFileSync('./美少女测试', '\r\n同步追加')
    

    (5) fs.createWriteStream()

     //大文件写入和频繁写入用createWriteStream,写入较少写就用上面的
    const ws = fs.createWriteStream('./美少女测试流式写入')
    ws.write('1')
    ws.write('2')
    //关掉就不写入,加不加都可以
    ws.close()
    

    文件读取

    使用场景:1.开机,2程序运行 3,编辑器打开文件 4.查看文件视频图片 4.git查看日志 5.上传文件 6.查看聊天记录

    方法同步/异步
    readFile异步
    readFileSync同步
    createReadStream异步
    (1)fs.readFile (path[, options], callback)
    • options  | 

    • callback 

      • err  | 
      • data  | 
    •  fs.readFile('./美少女测试', (err, data) => {
        if (err) {
          console.log('读取失败')
        }
        console.log(data.toString())
      })
      

      (2)fs.readFileSync(path[, options])

      返回<string> | <buffer>
      let a = fs.readFileSync('./美少女测试流式写入').toString()
      

      (3) fs.createReadStream

          //流式读取
      const test = fs.createReadStream('./pic/图片1.png')
      //绑定data事件
      test.on('data', chunk => {
        //读完一块就掉一次回调,chunk是内容的buffer数据
        console.log(chunk)
        //一次读多少数据
        console.log(chunk.length)
      })
          test.on('end',()=>{
          console.log('读取完毕')
          })
      

      文件删除 (1)fs.unlink(path, callback)

      fs.unlink('./test.txt', err =>{
          if(err) throw err
          console.log('删除成功')
      })
      
      fs.unlinkSync('./test2.txt')
      

      (2)fs.unlinkSync(path)

          fs.unlinkSync('./test.txt')
      

      创建文件 (1)fs.mkdir(path[, options], callback)

      • options  | 

        • recursive  默认值:  false
        • mode  |  Windows 上不支持。 默认值:  0o777
      • callback 

        • err 

        • path  |  仅当创建目录时将 recursive 设置为 true

      •     //迭代创建的时候才有path,不然path为undefined
         fs.mkdir('./1/2/3/4', { recursive: true }, (err,path) => {
          if (err) throw err
          console.log(path) //C:\Users\gqy\Desktop\nodeStu\1\2\3\4
        })
            fs.mkdir('./gqya', (err,path) => {
          if (err) throw err
          console.log(path) //undefiend
        })
        

        (2)fs.mkdirSync (path[, options])

        • 返回: undefined 或创建的第一个目录路径(如果 recursive 为 true)。

        fs.mkdirSync('./x/y/z', {recursive: true})
        

        读取文件夹

        // 异步读取
        fs.readdir('./论语', (err, data) => {
        	if(err) throw err
            console.log(data)
        })
        // 同步读取 
        let data = fs.readdirSync('./论语')
        console.log(data)
        

        删除文件夹

        //异步
        fs.rmdir('./gqya', err => {
          if(err) throw err
        })
        //同步
        fs.rmdirSync('./gqy')
        //递归删除
        fs.rm('./x', { recursive: true }, err => {
          if(err) throw err
        })
        

        查看资源

         //异步
         fs.stat('./pic', (err, data) => {
          if (err) throw err
          console.log(data)
        })
            //data
            Stats {
          dev: 4073911422,
          mode: 16822,
          nlink: 1,
          uid: 0,
          gid: 0,
          rdev: 0,
          blksize: 4096,
          ino: 10133099161618428,
          size: 0,
          blocks: 0,
          atimeMs: 1687185514422.5076,
          mtimeMs: 1685033526492.8372,
          ctimeMs: 1685033526492.8372,
          birthtimeMs: 1685030226050.346,
          atime: 2023-06-19T14:38:34.423Z,
          mtime: 2023-05-25T16:52:06.493Z,
          ctime: 2023-05-25T16:52:06.493Z,
          birthtime: 2023-05-25T15:57:06.050Z
        }
            
        //同步
        let data = fs.statSync('./2.操作.js')
        console.log(data)
        

        __dirname 保存当前文件夹的绝对路径,可以使用_dirname与文件名拼接成绝对路径推荐用这个

            let data = fs.readFile(__dirname + '/2.操作.js', (err,data) => {
          if (err) throw err
          console.log(data)
          
        })