文件操作就是i/o操作
input/output => i/o 操作 => 流 二进制 => buffer
数据(字符串,音频,视频,二进制) => buffer => stream
1.写入数据到文件
异步:
fs.writeFile(file, data[, options], callback)
const fs=require('fs');
fs.writeFile("./test.txt","test txt",(e)=>{//若是文件不存在,则创建文件
if(e){//若是问件目录不存在则会创建失败
console.log(e)
}else{
console.log("文件写入成功")
}
})
同步:
const fs=require('fs');
try {
let res=fs.writeFileSync("./test.txt","test txt")
console.log("写入文件成功");
} catch (e) {
console.log(e)
}
添加内容(异步):
const fs=require('fs');
fs.appendFile("./test.txt","追加的内容",(e)=>{
if(e){
console.log(e);
}else {
console.log("追加内容成功")
}
})
2.获取文件信息
const fs=require('fs');
fs.stat("./test.txt",(e,d)=>{
if(e){
console.log(e)
}else{
console.log(d);
}
})
stat有几个原型属性和方法。
分别是isFile(), isDirectory(), size, birthtime, mtime.
const fs=require('fs');
fs.stat("./test.txt",(e,d)=>{
if(e){
console.log(e)
}else{
console.log(d);
console.log(d.isFile())//true
console.log(d.isDirectory());//false
console.log(d.size);
console.log(d.mtime);
}
})
3.删除文件
fs.unlinkSync("./test.txt")
4.创建文件夹
fs.mkdirSync('./a/b/c');//创建失败,不能进行递归创建
fs.mkdirSync('./a');./、创建成功
5.删除空文件夹
fs.rmdirSync('./test')//不能直接删除非空文件夹
用递归的方法删除非空文件夹
function rmdir(dirPath) {
let files = fs.readdirSync(dirPath);
// console.log(files)files是数组;
files.forEach( child => {
let childPath = dirPath + '/' + child;
// 当前child可能是文件也有可能是文件夹
if ( fs.statSync(childPath).isDirectory() ) {
//因为文件夹里面可能还会有子文件,所以也不能直接删除
//而是需要调用rmdir方法
// fs.rmdirSync();
rmdir(childPath);
} else {
// 删除每一个子文件
fs.unlinkSync(childPath);
}
} );
fs.rmdirSync(dirPath);
}
6.监听文件
const fs=require('fs');
fs.watchFile("./test.txt",(event)=>{//event相当于事件对象
console.log("文件被改变了");
console.log(event);
})
7.监听文件夹
const fs=require('fs');
fs.watch("./text",(event,filename)=>{
console.log("event",event);
console.log("filename:",filename);
})
// event rename
// filename: test.123