Node.js
fs
// 文件系统 Filesystem
返回目录// 文件系统 Filesystem
const fs = require("fs");
// 一、 写入
// 1. 异步
// fs.writeFile(文件路径, 写入内容, [选项], 回调)
// 选项 : flag: 'a' 追加模式 'w'写入,默认值
fs.writeFile(
"./hello.txt",
"异步创建了文件\n",
{
flag: "a"
},
err => {
if (err) {
console.log(err);
return;
}
console.log("异步写入完成");
}
);
// 2. 同步
fs.writeFileSync("./同步.txt", "同步写入!!!", { flag: "a" });
console.log("同步写入完成");
// 二、 读取
// 在读取较小的文件时推荐使用
// fs.readFile(文件路径,[解码方式,默认buffer,可写成'utf-8'],回调)
fs.readFile("./hello.txt", "utf-8", (err, data) => {
// if (err) return; //键哥
if (err) throw err; //宇哥
// data 默认是Buffer数据,二进制数据(展示出来的是十六进制)
// data.toString() 转为字符串形式
// console.log(data.toString());
console.log("readFile方法读取", data);
});
// fs.open 方法英语分配新的文件描述符, 一旦被分配,则文件描述符可用于从文件读取数据、向文件写入数据、或请求关于文件的信息。
fs.open("./hello.txt", "a+", (err, fd) => {
if (err) throw err;
console.log(fd);
let buf = Buffer.alloc(255);
fs.read(fd, buf, 0, 15, null, (err, bytesRead, buffer) => {
if (err) throw err;
console.log("read", buffer.toString());
});
let buf1 = Buffer.from("追加的内容");
fs.write(fd, buf1, (err, bytesRead, buffer) => {
if (err) throw err;
console.log("追加完成");
});
fs.close(fd, () => {
console.log("描述符已关闭");
});
});
// 三、 改名
fs.rename("./hello.txt", "./hello word.txt", err => {
if (err) return;
console.log("重命名完成");
});
//流
// 四、 可读流 可写流
// <buffer 61 62 63>
let bigFile = fs.createWriteStream("./bigFile.txt"); //创建可写流
for (let i = 0; i < 1e6; i++) {
bigFile.write("小伙子 你也是复读机 \n");
}
bigFile.end(); //关闭流
let readStream = fs.createReadStream("./bigFile.txt");
let writeStream = fs.createWriteStream("./writeMe.txt");
readStream.pipe(writeStream);
writeStream.on("open", () => {
console.log("正在通过管道");
});自动生成目录
// 读取当前目录
fs.readdir("./", (err, files) => {
if (err) throw err;
let summary = "";
// 遍历目录中文件名
files.forEach(file => {
fs.stat(file, (err, stats) => {
console.log(file, "是目录", stats.isDirectory());
});
// 提取文件名
let name = path.parse(file).name;
summary += `* [${name}](${file})\n`;
});
fs.writeFile("./summary.md", summary, err => {
if (err) throw err;
console.log("目录已生成");
});
});
// 遍历目录多层结构 ---> 深拷贝(原理一致)