一、同步&异步
所有的方法都有异步和同步的形式
node里关于文档的操作方法基本由异步和同步两种
使用前需导入核心模块fs
const fs = require("fs");
示例:
1.异步:
const fs = require("fs");
// 读取文件
fs.readFile("./fsfile.txt","utf8",(err,data)=>{
if(err) {
console.log("文件读取失败,原因是:"+err);
return;
}
console.log(data);
})
console.log("西游记孙悟空");
注:若此处不写utf8,则在输出中写data.toString()
终端输出结果:
因读取文件需要一定的时间,所以先输出console.log中的内容。
2.同步
const fs = require("fs");
const data = fs.readFileSync("./fsfile.txt","utf8")
console.log(data);
console.log("西游记孙悟空");
终端输出结果:
同步则是上一个任务完成,下一个才能执行。
二、文件操作
1.读文件fs.readFile()(上述已经说明)
2.写文件fs.writeFile()
默认就是utf8的编码格式
效果:删掉文档原内容,写入新内容,如果指定文档不存在,则新建
示例:
const fs = require("fs");
var text = "这是四大名著"
fs.writeFile("./fsfile.txt",text,err=>{
if(err) {
console.log("文件写入失败,原因:"+err);
return;
}
console.log("文件写入成功");
})
终端输出:
此时内容已经被写入fsfile中,fsfile中原先内容已经被覆盖。
3.追加fs.appendFile()
示例:
const fs = require("fs");
var text = "!中国历史上最著名的四本书籍"
fs.appendFile("./fsfile.txt",text,err=>{
if(err){
console.log("文件追加失败,原因:"+err);
return;
}
console.log("文件追加成功");
})
终端输出:
此时fsfile中的末尾应有
4.拷贝fs.copyFile()
示例:
const fs = require("fs");
fs.copyFile("./file.txt", "./fsfile.txt", err => {
if (err) {
console.log("文件拷贝失败,原因:" + err);
return;
}
console.log("文件拷贝成功");
})
终端输出
此时,fsfile中的内容已经改变成file中的内容:
三、流操作
1、读取流
一般读取的是大文件
示例:
const fs = require("fs");
const rs = fs.createReadStream("./file.txt", { encoding: "utf8" });
rs.on("open", () => {
console.log("读取流 open");
})
let text = '';
rs.on("data", chunk => {
// chunk是一个buffer,当前读取的数据片段,二进制数据流
// count++;
// console.log(count);
// 拼接
text+=chunk;
})
rs.on("end",()=>{
console.log("文件读取end");
console.log(text);
})
rs.on("close",()=>{
console.log("读取流 close");
})
终端输出:
2.写入流
示例:
const fs = require("fs");
const ws = fs.createWriteStream("./fsfile.txt");
ws.write("叮叮当,叮叮当");
ws.end();
ws.on("open", () => {
console.log("可写流开启");
})
ws.on("close", () => {
console.log("可写流关闭");
})
终端输出
此时,已经把内容写入到fsfile中去了