# 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()
# 文件读取
- 概述:读取的
data为 buffer对象,可以使用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()) /* 是否是文件夹 */
})