fs模块
这篇文章来谈一谈node的内置模块之一fs文件系统模块。
有很多api,下面来说一下比较常见的api:
1.读取文件
readFile(path,callback)
异步操作
fs.readFile("../q.txt",(err,data)=>{console.log(data);})
readFileSync(path)
同步操作
const read = fs.readFileSync("../q.txt") 同步读取
2.写入文件
writeFile(path,content[,options],callback)
异步操作:options为可选项。重要点的是追加功能。‘a’
fs.writeFile("./大哥.css","余文小布余文小布余文小布",{flag:'a'},()=>{})
writeFileSync --同步操作
writeFileSync(path,content[, options])
3.删除文件
同步删除 unlink(path,callback)
异步删除 unlinkSync(path)
fs.unlink('./1.js',(err)=>{console.log(err)
})
const data=fs.unlinkSync('./1.js')
4.操作文件夹
创建文件夹
mkdir(path,callback)—异步创建
mkdirSync(path)—同步创建
删除文件夹
rmdir(path,callback)—异步删除
rmdirSync(path)----同步删除
读取文件夹
readdir(path,callback)
readdirSync(path)
数组结构的 文件夹下面的所有的子文件 子文件夹,深度只嵌套到第一层
5.判断文件夹是否存在
exitsSync(path)
返回boolean,存在返回true,不存在返回false。
6.修改文件名或文件夹名
rename(oldpath,newpath,callback)
renameSync(oldpath,newpath)
7.监听文件或文件夹
watch(path,callback)
回调函数有两个参数
第一个参数:触发的事件 rename change
第二个参数:修改或添加或删除的文件名
8.文件流
为什么需要文件流呢?
来看一个例子
const fs = require('fs')
fs.readFile('./1.txt', (res, data) => {fs.writeFile('./copy.txt', data, (err, data) => {console.log("写入完成");})
})
这样是一次性读取,一次性写入,如果文件非常大的话,我们这样会对用户造成极为不好的体验。因此我们采用流的方式来读取文件。先来看看原生的方法怎么写?
const fs = require('fs')
const read = fs.createReadStream('./1.txt')
const write = fs.createWriteStream('./2.txt')
console.log(read.readableFlowing, '1');
read.resume()
console.log(read.readableFlowing, '2');
let res = ""
read.on('data', (data) => {res += data
})
read.on('end', () => {write.write(res)
})
语法糖写法:pipe()
const fs = require('fs')
const read = fs.createReadStream('./1.txt')
const write = fs.createWriteStream('./2.txt')
read.pipe(write)
读取流.pipe(写入流)