常用文件操作
const { error } = require("console")
const fs = require("fs")
// error-first风格
// 创建目录
fs.mkdir('./avator', (err) => {
console.log(err);
if (err && err.code === 'EEXIST') {
console.log('目录已经存在');
}
})
// 重命名
fs.rename('./avator', 'nice', (err) => {
console.log(err);
})
// 移除目录, 目录必须为空
fs.rmdir('./nice', (err) => {
if (err && err.code === 'ENOENT') {
console.log('目录不存在');
}
// console.log(err);
})
// 覆盖写入文件
fs.writeFile('./avator/a.txt', 'hahaha', (err) => {
console.log(err);
})
// 读取文件
fs.readFile('./avator/a.txt', 'utf-8', (error, data) => {
console.log(error);
console.log(data);
})
// 删除文件
fs.unlink('./avator/a.txt', (err) => {
console.log(err);
})
//读取目录包含哪些文件 遍历删除文件 同步删除文件,阻塞删除目录,解决异步引起的问题
fs.readdir('./avator', (err, data) => {
console.log(err);
console.log(data);
data.forEach(item => {
fs.unlinkSync(`./avator/${item}`)
})
fs.rmdir('./avator', err => {
console.log(err);
})
})
// 读取目录信息
fs.stat('./avator', (err, data) => {
console.log(err);
console.log(data.isFile());
})
//同步操作要进行捕获错误,避免系统崩溃
try {
fs.mkdirSync('./avator')
} catch (error) {
console.log(error);
}
异步操作文件
const fs = require('fs').promises
fs.readdir('./avatar').then( async (data) => {
// let arr = []
// data.forEach(item => {
// arr.push(fs.unlink(`./avator/${item}`))
// })
await Promise.all(data.map(item => fs.unlink(`./avatar/${item}`)))
await fs.rmdir('./avatar')
})
stream 流
读
const fs = require('fs')
const rs = fs.createReadStream('./stream_text.txt', 'utf-8')
rs.on('data', (chunk) => {
console.log(chunk);
})
rs.on('end', () => {
console.log('end');
})
rs.on('error', (err) => {
console.log(err);
})
写
const fs = require('fs')
const ws = fs.createWriteStream('./stream_text.txt', 'utf-8')
ws.write('okkkkkkkkkkkkkkkkkkkkkkkkkk')
ws.end()
管道
const fs = require('fs')
const readStream = fs.createReadStream('./stream_text.txt')
const writeStream = fs.createWriteStream('./02_text.txt')
readStream.pipe(writeStream)