# Fs

  • fs 模块可以实现文件的 crud
  • fs 路径__dirname类似全局变量,保存运行文件的路径的变量

# 文件操作

# 文件写入

  • 概述:不存在文件则创建 如果存在对应文件 会覆盖原内容
const fs = require('fs')
// 异步
fs.writeFile('./file.txt', 'hello world', err => {
  if (err) {
    console.log(err)
    return
  }
})

// 同步
fs.writeFileSync('./file.txt', 'hello world')

// writeFile flag 'a' => append, 'r' => read, 'w' = write
fs.writeFile('./file.txt', 'hello world', { flag: 'a' }, err => {
  // do something...
})
  • 追加写入
// 异步
fs.appendFile('./file.txt', '练习时长两年半的小黑子'err => {
  // do something...
})

// 同步
fs.appendFileSync('./file.txt', '练习时长两年半的小黑子')
  • 流式写入
// 获取实例对象
const ws = fs.createWriteStream('./file.txt')

// 通过实例方法 write
// 持续的写入 适用于频繁的写入时的操作
ws.write('hello world')
ws.close()

# 文件读取

  • 概述:读取的databuffer对象,可以使用 toString()方法
const fs = require('fs')
// 异步
fs.readFile('./file.txt', (err, data) => {
  if (err) return
  console.log(data.toString())
})

// 同步
const data = fs.readFileSync('./file.txt')
console.log(data.toString())
  • 流式读取
const rs = fs.createReadStream('./file.txt')
// 每当读取出一块文件 都会出触发回调事件
rs.on('data', chunk => {
  console.log(chunk)
  // chunk 长度为 65536 => 64kb
  // 每读取 64kb 的数据 就会触发 
  console.log(chunk.length)
})

rs.on('end', () => {
  console.log('读取完成')
})

# 文件的重命名与移动

// 原路径与新路径
fs.rename('./sourceFile.txt', '../targetFile.txt', err => {
  // do something...
})

# 文件的删除

fs.unlink('./file.txt', err => {
  if (err) return
})

// node 14 新增的 rm 方法
fs.rm('./file.txt', err => {
  // do something...
})

# 文件夹的操作

# 创建文件夹

fs.mkdir('./dir', err => {
  // do something...
})
// recursive 递归创建
fs.mkdir('./a/b/c', { recursive: true }, err => {
  // do something...
})

# 读取文件夹

fs.readdir('./', (err, data) => {
  if (err) return
  // 返回的是一个数组 数组每一项是对应文件夹下的文件名称
  console.log(data)
})

# 删除文件夹

fs.rmdir('./dir', err => {
  // do something...
})
// 推荐使用
fs.rm('./dir', { recursive: true }err => {
  // do something...
})

# 查看文件是否已经存在

fs.exist(path)

# 查看资源状态

fs.stat('./file.txt', (err, data) => {
  if (err) return
  // 返回文件的信息 size 
  console.log(data)
  console.log(data.isFile()) /* 是否是文件 */
  console.log(data.isDirectory()) /* 是否是文件夹 */
})