- 个人学习记录,如有问题,欢迎各位大佬指出
- 在新版的Node.js中,许多异步API都支持Promise方式。这意味着可以使用Promise来处理异步操作,而不再依赖于回调函数
1、写入文件
const fs = require("fs");
/**
* writeFile 异步写入文件
* @param {string} path - 文件路径
* @param {string | Buffer} data - 写入的内容
* @param {(Error | null) => void} callback - 回调函数,写入完成后调用
* @returns {void}
*/
// https://www.geeksforgeeks.org/node-js-fs-writefile-method/ 第三个参数为options(对象或字符串),可选项,如果没有则走回调
fs.writeFile("./demo.txt", "我是fs.writeFile写入的内容哦", err => {
// 写入失败 err为一个错误对象
if (err) return console.log("writeFile写入失败", err);
// 写入成功 err为null
console.log("writeFile写入成功", err);
});
/**
* writeFileSync 同步写入文件
* @param {string} path - 文件路径
* @param {string | Buffer} data - 写入的内容
* @returns {void}
*/
fs.writeFileSync("./胖虎.js", "我是fs.writeFileSync写入的内容哦");
/**
* appendFile 异步追加写入文件
* @param {string} path - 文件路径
* @param {string | Buffer} data - 写入的内容
* @param {(Error | null) => void} callback - 回调函数,写入完成后调用
* @returns {void}
*/
fs.appendFile("./demo.js", '\r\nconsole.log("appendFile追加的console");', err => {
// 追加写入失败 err为一个错误对象
if (err) return console.log("appendFile追加写入失败", err);
// 追加写入成功 err为null
console.log("appendFile写入成功", err);
});
/**
* appendFileSync 同步追加写入文件
* @param {string} path - 文件路径
* @param {string | Buffer} data - 写入的内容
* @returns {void}
*/
fs.appendFileSync("./demo.js", '\r\nconsole.log("appendFileSync追加的console");');
// 文件流式写入 逐步写,但是生成的时候会生成第一个,后续放依赖进行缓存,直到缓存区写完,第一次写入是真的向文件中写,后续的操作都缓存到链表中
const ws = fs.createWriteStream("./stream.js"); // 创建写入流对象和通道
let index = 0;
let timer = setInterval(() => {
index++;
if (index > 10) {
clearInterval(timer);
timer = null;
ws.end(); // ws.close() 自己查区别 // 关闭通道 可选 默认会关闭
return;
}
ws.write(`\r\nconsole.log("${index} 我是流式写入的文件");`); // 写入
}, 100);
2、读取文件
const fs = require("fs");
/**
* readFile 异步一次性读取文件
* @param {string} path - 文件路径
* @param {((Error | null) , data) => void} callback - 回调函数,写入完成后调用
* @returns {void}
*/
// 第二个参数为options(对象或字符串),可选项,如果没有则走回调
fs.readFile("./demo.js", (err, data) => {
// 读取失败 err为一个错误对象
if (err) return console.log("readFile读取失败", err);
// 读取成功 err为null
console.log("readFile写入成功", data.toString());
});
/**
* readFileSync 同步一次性读取文件
* @param {string} path - 文件路径
* @returns 读取的文件
*/
const panghuData = fs.readFileSync("./demo.js");
// 文件流式读取
const rs = fs.createReadStream("./demo.js"); // 创建读取流对象和通道
// 绑定data事件
rs.on("data", chunks => {
console.log("🚀 ~ chunks:", chunks.toString()); // toString注意文件类型
});
// 绑定end事件
rs.on("end", () => {
console.log("读取完成");
});
3、文件重命名与移动
const fs = require("fs");
/**
* rename 异步重命名或移动文件
* @param {string} path - 文件原路径
* @param {string} path - 文件新路径 就可以重命名
* @param {(Error | null) => void} callback - 回调函数,完成后调用
* @returns {void}
*/
fs.rename("./demo.js", "./demo_copy.js", err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// renameSync 同步
fs.renameSync("./demo1.js", "./demo1_copy.js");
4、文件删除
const fs = require("fs");
/**
* unlink 删除文件
* @param {string} path - 文件路径
* @param {(Error | null) => void} callback - 回调函数,完成后调用
* @returns {void}
*/
fs.unlink("./demo_copy.js", err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// 同步 unlinkSync
fs.unlinkSync("./demo_copy.js");
// rm方法 14.4版本增加
/**
* rm 删除文件
* @param {string} path - 文件路径
* @param {(Error | null) => void} callback - 回调函数,完成后调用
* @returns {void}
*/
fs.rm("./demo_copy.js", err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// 同步 rmSync
fs.rmSync("./demo_copy.js");
5、文件夹操作
const fs = require("fs");
/**
* mkdir 异步创建文件夹
* @param {string} path - 文件路径
* @param {(Error | null) => void} callback - 回调函数,完成后调用
* @returns {void}
*/
fs.mkdir("./node_测试文件夹", err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// 递归创建 直接创建会失败 必须增加第二个配置项 recursive为true
fs.mkdir("./node_测试文件夹/a/b", { recursive: true }, err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// mkdirSync 同步创建文件夹
fs.mkdirSync("./node_测试文件夹");
// readdir 异步读取文件夹
fs.readdir("./", (err, data) => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", data);
});
// readdirSync 同步读取文件夹
fs.readdirSync('./')
// rm 异步删除文件夹
fs.rmdir("./node_测试文件夹/a/b", err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// rmdirSync 同步删除文件夹
fs.rmdirSync('./')
// 递归删除文件夹 (不推荐)
fs.rmdir("./node_测试文件夹", { recursive: true }, err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
// 递归删除文件夹 (推荐)
fs.rm("./node_测试文件夹", { recursive: true }, err => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", err);
});
6、查看资源状态
const fs = require("fs");
/**
* stat 查看资源状态
* @param {string} path - 文件路径
* @param {((Error | null),object) => void} callback - 回调函数,完成后调用
* @returns {void}
*/
fs.stat("./demo.js", (err, data) => {
// 失败 err为一个错误对象
if (err) return console.log("失败", err);
// 成功 err为null
console.log("成功", data);
// isFile 检查资源是否是文件
console.log(data.isFile());
// isDirectory 检查资源是否是文件夹
console.log(data.isDirectory());
});
// 同步 statSync
fs.statSync("./demo.js");