node 文件操作
前提:引入fs模块
const fs = require('fs')
打开文件
//同步方式
console.log(123);
let fd = fs.openSync('./abc.txt','a');
// 写入内容
fs.writeFileSync(fd,'666666')
// 关闭文件
fs.closeSync(fd);
//异步方式 打开,写入
// 打开文件进行读取和追加。 如果文件不存在,则创建该文件
fs.open('test.html', 'a+', function (err, fd) {
if (err) throw err;
// 写入内容
fs.writeFile(fd , 'hello world' , function (err) {
if (err) throw err;
console.log('内容写入成功!!')
})
})
console.log('先输出此内容,不会等待')
写入流
let ws = fs.createWriteStream('writeStream.txt')
// 监听通道打开
ws.once('open',function(){
console.log('写入流通道打开')
ws.write('内容1')
ws.write('内容2')
ws.write('内容3')
// 写入流停止
ws.end();
})
// 监听通道关闭
ws.once('close',function(){
console.log('写入流通道关闭')
})
读取流与写入流
let rs = fs.createReadStream('abc.txt')
let ws = fs.createWriteStream('666.txt')
// 监听读取流打开
rs.once('open',function(){
console.log('监听读取流')
})
// 监听读取流关闭
rs.once('close',function(){
console.log('读取流关闭')
})
// 监听写入流打开
ws.once('open',function(){
console.log('监听写入流')
})
// 监听写入流关闭
ws.once('close',function(){
console.log('写入流关闭')
})
// 将读取的数据通过写入流写入
rs.on('data',(data)=>{
// console.log(err)
console.log(".....",data)
ws.write(data)
})
*/
/*
读取流和写入流,管道方式
let rs = fs.createReadStream('abc.txt')
let ws = fs.createWriteStream('777.txt')
// 创建管道,将读取流通过管道流出
rs.pipe(ws);
*/
读取文件后,再写入指定文件
//读取文件后,写入内容
fs.readFile('test.html', function (err, data) {
if(err) throw err;
fs.writeFile('test1_copy.html',data,function(err){
if(err) throw err;
console.log('文件写入/copy成功!!')
})
})
删除文件
fs.unlink('writeStream.txt',function(err) {
if(err) throw err;
console.log('test.html-->文件删除成功')
})
删除空文件夹
fs.rmdir('./test',function(err){
if(err) throw err;
console.log('test文件夹删除成功!!')
})
创建空文件夹
fs.mkdir('./root',function(err){
if(err) throw err;
console.log('文件创建成功')
})
读取目录下的所有文件
fs.readdir('./',(err,files)=>{
if(err) throw err;
console.log(files)
})
读取文件信息
可以通过istats.isFile()判断是否为文件,stats.isDirectory()判断是否为文件夹/目录
fs.stat('./abc.txt',(err,stat)=>{
if(err){throw err;}
console.log('stat',stat)
})
递归删除非空文件夹
// 封装成一个 可以删除非空目录的函数(传入要删除的目录即可)
function delDir (dir) {
// 获取传入的目录下所有的文件 结果是一个数组
var filesArr = fs.readdirSync(dir);
// 循环遍历这个数组 ['bb', 'cc', 'text.txt']
for (var i in filesArr) {
// 拼接读取文件信息的路径
var path = dir + '/' +filesArr[i] // ./aa/bb ./aa/cc ./aa/text.txt
// 读取文件的信息
var stat = fs.statSync(path);
// 判断 如果是文件 直接删除
if (stat.isFile()) {
fs.unlinkSync(path) // 直接删除
} else if (stat.isDirectory()) {
// 递归调用自己
delDir(path)
}
}
// 删除空目录(文件夹)
fs.rmdirSync(dir)
}