FS

File System文件系统(fs)

在Node中,Node通过fs模块和文件系统进行交互,该模块提供了一些标准文件访问API来打开、读取、写入文件,以及与其交互

使用fs模块,首先需要对其进行加载 let fs=require('fs') ,由于fs属于核心模块,所以就直接引入不需要加载

同步调用

同步系统会阻塞程序的执行,也就是说程序从上往下按照顺序执行,除非操作完毕,否则不会向下继续执行

打开文件

fs.openSync(path,flags,[mode])

  • 该方法会返回一个文件描述符,通过对这个描述符来对该文件进行操作
  • path ,打开文件的路径
  • flags,打开文件的操作类型
    • r ,只读
    • w, 可写
    • mode,设置文件操作的权限,一般不传

写入文件

fs.writeSync(fd,string,[positon,encoding])

  • fd,文件操作符
  • string, 输入的内容
  • position,该值为数字,代表从文件的起始位置开始

关闭文件

fs.closeSync(fd)

  • fd,要关闭文件的描述符
let fs=require('fs')
let make=fs.openSync('hi.txt','w')
fs.writeSync(make,"now is night")
fs.closeSync(make)

异步调用

异步文件系统不会阻塞系统程序的执行,而是在操作完成后,通过回调函数将结果返回

打开,写入,关闭文件比起同步多了一个回调函数,返回值和后续操作都在回调函数中完成

fs.open(path[, flags[, mode]], callback)

fs.write(fd, string[, position[, encoding]], callback)

fs.close(fd, callback)

//传统的回调函数,回调过多,就称之为回调地狱
let fs=require('fs')
fs.open("yibu.txt",'w',function(error,fd){
  if(!error){
    console.log("open success")
    fs.write(fd,"now is write",function(error){
      if(!error){
        console.log('write success')
      }
      fs.close(fd,function(error){
        if(!error){
          console.log('close success')
        }
      })
    })
  }else{
    console.log(error)
  }
})

简单文件打开、写入、关闭

异步调用

fs.writeFile(file, data[, options], callback)

同步调用

fs.writeFileSync(file, data[, options])

参数

  • file , 要执行操作的文件的路径,可以是绝对路径也可以是相对路径
  • data, 要写入的数据
  • [options](object),可选的内容,该参数是一个对象的形式
    • encoding,默认值 utf-8
    • mode,默认值: 0o666
    • flag,默认值'w'
      • 'w',写入
      • 'r',只读
      • 'a',在文件创建的基础之上增加数据
  • callback,文件操作完成后要执行的函数
let fs=require('fs')
fs.writeFile('C:\\Users\\惟岸明雪\\Desktop\\Node\\two.txt','此步操作只为了写入上级目录文件夹中',{flag:'a'},function(err){
  if(!err){
    console.log('简单写入成功')
  }else{
    console.log(err)
  }
})

流式文件写入

对于普通同步、异步,简单写入的方式都是一次性地写入数据,这样的方式需要内存预留出一定的空间,不适合过大的文件,如果按照此种方式一次性写入大型的文件,可能会导致内存不足的内容溢出,所以就有必要使用流式的文件写入法

fs.createWriteStream(path,[options]),对指定文件创建一个流,可以多次写入数据

let flu=fs.createWriteStream('three.txt')
flu.write('这是开始的一小步,')
flu.write('紧跟在一小步的后面')
flu.write('一小步后面还会更上一层楼的')
flu.end()  //结束文件的流式传输

//监听流式的进程
flu.once('open',function(){
  console.log('open done')
})
flu.once('close',function(){
  console.log('close done')
})

文件读取

简单文件读取

简单文件读取同样是一次性地读取文件。文件的读取不仅仅局限于字符串,也可是图片或者音频

fs.readFile(path[, options], callback),简单文件的异步读取

fs.readFileSync(path[, options]) ,简单文件的同步读取

let fs=require('fs')
fs.readFile('three.txt',function(err,data){
  if(!err){
    fs.writeFile('copy.txt',data,function(){      //将读取的内容写入copy.txt
      console.log('succ')
    })
  }
}) 

流式文件读取(相对适用于大文件的读取)

let fse=require('fs')
let fsed=fse.createReadStream('intro.txt')
let fsx=fse.createWriteStream('made.txt')
fsed.pipe(fsx)
// pipe 将可读流中的内容直接输出到可写流中
posted @ 2021-01-11 18:30  Serenpity  阅读(659)  评论(0编辑  收藏  举报