fs模块

作者: 懂会悟 | 来源:发表于2020-09-13 08:08 被阅读0次

1、fs.stat

  • fs.stat(path, callback)

fs.stat是异步方法,用于检测是文件还是目录,path 文件路径,callback(err, stats) stats是文件对象

const fs = require('fs')
fs.stat('hello.js', (error, stats) => {
  if (error) {
    console.log(error)
  } else {
    console.log(stats)
    console.log(stats.isFile())
    console.log(stats.isDirectory())
  }
})
  • fs.statSync(path)

fs.statSync 同步方法,用于检测文件还是目录,只需要传入路径即可

const fs = require('fs')
const info =  fs.statSync('test.html')
console.log(info.isFile())
console.log(info.isDirectory())
console.log(info)

<!--info-->

Stats {
  dev: 1926720246,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 39969446694184670,
  size: 471,
  blocks: undefined,
  atimeMs: 1595981445303.3115,
  mtimeMs: 1593757376987.273,
  ctimeMs: 1593757376987.273,
  birthtimeMs: 1586518842700.2656,
  atime: 2020-07-29T00:10:45.303Z,
  mtime: 2020-07-03T06:22:56.987Z,
  ctime: 2020-07-03T06:22:56.987Z,
  birthtime: 2020-04-10T11:40:42.700Z
}


2、fs.mkdir

  • fs.mkdir(path,[mode],callback)

fs.mkdir(path,[mode],callback) 异步方法 创建目录,path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数

const fs = require('fs')
fs.stat('hello.js', (error, stats) => {
  if (error) {
    console.log(error)
  } else {
    console.log(stats)
    console.log(stats.isFile())
    console.log(stats.isDirectory())
  }
})
  • fs.mkdirSync(path,[mode])

fs.mkdirSync(path,[mode]) 同步方法 创建目录,path是需要创建的目录,[mode]是目录的权限

const fs = require('fs')
fs.mkdirSync('../test')

3、fs.writeFile

  • fs.writeFile(path, data, [options], callback)

fs.writeFile(path, data[, options], callback) path 文件路径 data 要写入文件的数据可以是String 或者 Buffer对象 options 是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 ,flag 为 'w'

如果文件存在,写入的内容会覆盖旧文件内容, 如果文件不存在则创建文件并写入内容

const fs = require('fs')
fs.writeFile('text.txt', 'Hello World', (error) => {
  if (error) {
    console.log(error)
  }
})
  • fs.writeFileSync(path, data, [options])

作用与writeFile相同,只是是同步方法

const fs = require('fs')
fs.writeFileSync('text.txt', 'Hello World')

4、fs.appendFile

  • fs.appendFile(path, data, [encode], callback)

fs.appendFile(path, data, [encode], callback) path 文件路径 data 要写入文件的数据可以是String 或者 Buffer对象 encode 设置编码

如果文件存在,写入的内容会追加到旧文件内容后面, 如果文件不存在则创建文件并写入内容

const fs = require('fs')
fs.appendFile('text.txt', '采菊东篱下,悠然见南山\n', 'utf-8', (error) => {
  if (error) {
    console.log(error)
  }
})
  • fs.appendFileSync(path, data, [options])

作用与appendFile相同,只是是同步方法

const fs = require('fs')
fs.appendFileSync('text.txt', '采菊东篱下, 悠然见南山\n')

5、fs.readFile

  • fs.readFile(path, encode, callback)

fs.readFile(path, encode, callback)读取文件 path 文件路径 encode 设置编码,如果不设置此编码格式返回值是Buffer

const fs = require('fs')
fs.readFile('text.txt', (error, data) => {
  if (error) {
    console.log(error)
  }
  使用toString()将Buffer转化为String
  console.log(data.toString()) 
})

fs.readFile('text.txt', 'utf-8' , (error, data) => {
  if (error) {
    console.log(error)
  }
  console.log(data)
})
  • fs.readFileSync(path, data, [options])

作用与readFile相同,只是是同步方法

<!--未使用编码格式-->
const fs = require('fs')
const info = fs.readFileSync('text.txt')
console.log(info.toString())

<!--使用编码格式-->
const info = fs.readFileSync('text.txt', 'utf-8')
console.log(info)

6、fs.readdir

  • fs.readdir(path, callback)

fs.readdir(path, callback) 读取目录 path 文件路径 callback有两个参数:error: 错误信息 files:由被读取目录的文件列表组成的数组

const fs = require('fs')
fs.readdir('../JS', (error, files) => {
  if (error) {
    console.log(error)
  }
  console.log(files)
})

// [ 'child.html', 'hex-md5.js']
  • fs.readdirSync(path)

作用与readdir相同,只是是同步方法

const info = fs.readdirSync('../JS')
console.log(info)
// [ 'child.html', 'hex-md5.js']

7、fs.rename

  • fs.rename(oldname, newname, callback)

fs.rename重命名 还可以改变文件类型,一般不要这样做容易导致文件不可用
fs.renameSync 同步函数

const fs = require('fs')
fs.rename('text.txt', 'text1.html', (error) => {
  if (error) {
    console.log(error)
  }
})

const info = fs.renameSync('text1.html', 'text.txt')
console.log(info)

8、fs.rmdir

  • fs.rmdir(path, callback)

fs.rmdir 删除空目录,如果目录不为空,则不能删除
fs.rmdirSync() 同步函数

const fs = require('fs')
fs.rmdir('text', (error) => {
  if (error) {
    console.log(error)
  }
})

fs.rmdirSync('text')

9、fs.unlink

  • fs.unlink(path, callback)

fs.unlink 删除文件
fs.unlinkSync() 同步函数

const fs = require('fs')
fs.unlink('text/text.js', (error) => {
  if (error) {
    console.log(error)
  }
})
fs.unlinkSync('text/text.js')

10、fs.createReadStream

  • fs.createReadStream(path, highWaterMark)

fs.createReadStream 从文件流中读取数据,highWaterMark每次从文件中读取的数据大小默认最多读取64K,读取内容是buffer类型,

const fs = require('fs')
const stream = fs.createReadStream('text/a.txt', { highWaterMark: 30 })
const arr = []
// 每从文件中读取一笔数据就会触发data函数
stream.on('data', (chunk) => {
  console.log(chunk.length)
  arr.push(chunk)
})
// 读取结束触发end函数
stream.on('end', (chunk) => {
  console.log(Buffer.concat(arr).toString())
})
// 报错时执行此函数
stream.on('error', (error) => {
  console.log(error)
})

// pause()暂停读取
stream.pause()
// resume()恢复读取
stream.resume()

const fs = require('fs')
const stream = fs.createReadStream('text/a.txt', { highWaterMark: 30 })
const arr = []
let count = 0
stream.on('data', (chunk) => {
  // console.log(chunk.length)
  count += chunk.length
  console.log('count', count);
  if (count > 60) {
    stream.pause()
  }
  arr.push(chunk)
})
stream.on('end', (chunk) => {
  console.log(Buffer.concat(arr).toString())
})
stream.on('error', (error) => {
  console.log(error)
})


11、fs.createWriteStream

fs.createWriteStream() 以流的方式写入文件

const fs = require('fs')
const data = '此中有真意,欲辨已忘言。\n此中有真意,欲辨已忘言。\n结庐在人境,而无车马喧。\n问君何能尔?心远地自偏。\n采菊东篱下,悠然见南山。\n山气日夕佳,飞鸟相与还'
// 创建一个可以写入的流,写入到文件 output.txt 中
const stream = fs.createWriteStream('output.txt')
// 使用 utf8 编码写入数据
stream.write(data, 'utf-8')
// 标记文件末尾
stream.end()
// 数据写入完毕触发finish事件
stream.on('finish', () => {
  console.log('finish')
})
// 报错时触发此事件
stream.on('error', (error) => {
  console.log(error.stack)
})

12、管道流

管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传 递到另外一个流中,从而完成大文件的复制

const fs = require('fs')
const readStream = fs.createReadStream('text/a.txt')
const writeStream = fs.createWriteStream('b.txt')
readStream.pipe(writeStream)
// 这样就将a.txt文件的内容复制到b.txt中了

相关文章

网友评论

      本文标题:fs模块

      本文链接:https://www.haomeiwen.com/subject/npcosktx.html