最近在实训,学了一下node想着用node写接口,完成实训项目,不过老师要求用java,那就只能和后端的一起合作写项目了,不过还是分享一下这星期学的node的fs模块吧。
在客户端,出于安全考虑,我们并不能操作文件,不过node中的fs模块可以让我们在服务器端操作文件。
读取文件
我们以读取同级目录的aaa.txt文件为例,记住引入fs模块
const fs = require("fs");
方式一
同步读取文件,代码会被阻塞
const res1 = fs.readFileSync("./aaa.txt", {
encoding: "utf-8",
});
// 这里调用toString()方法或者上边读取文件的时候指定读取的编码格式
console.log(res1);
方式二
异步读取文件,异步读取文件有两种方式一种是回调函数,另一种是通过promise的形式读取,回调函数的形式会造成回调地狱所以不太建议使用(并不会阻塞代码)
//回调函数
fs.readFile(
"./aaa.txt",
{
encoding: "utf-8",
},
(err, data) => {
if (err) {
console.log("读取文件错误");
return;
}
console.log(data);
}
);
console.log("后续代码");
//promise形式
fs.promises
.readFile("./aaa.txt", {
encoding: "utf-8",
})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
console.log("后续代码");
写入文件
const content = "我是写入的内容";
/*
文件写入操作
第一个参数是要写入文件的路径(不存在会自动创建)
第二个参数是写入的内容
第三个参数是配置对象(可不传)包括写入的编码格式以及写入方式
第四个参数是回调函数
*/
fs.writeFile(
"./ccc.txt",
content,
{
encoding: "utf-8",
flag:"w"
},
(err) => {
if (err) {
console.log("文件写入错误", err);
return;
}
console.log("写入文件成功");
}
);
我们来简单的看一下flag一些常见的值以及具体含义
falg | 值含义 |
---|---|
w | 打开文件写入(如果没有会自动创建文件),默认值 |
w+ | 打开文件进行读写操作(可读可写) |
r | 打开文件读取,读取时默认值 |
r+ | 打开文件进行读写,如果不存在会抛出异常 |
a | 打开文件并将写入内容放入文件末尾,如果不存在会创建文件 |
a+ | 打开文件可以进行读写操作 |
w进行写入操作时会默认覆盖原本的内容,而a会在文件内容末尾添加上写入的内容
文件重命名
fs.rename("./aaa.txt", "./bbb.txt", (err) => {
console.log("重命名结果", err);
});
创建文件夹
// 创建文件夹
fs.mkdir("./new", (err) => {
if (err) {
console.log("创建失败", err);
return;
}
console.log("创建成功");
});
文件夹重命名
fs.rename("./new", "./renameDir", (err) => {
console.log("重命名结果", err);
});
文件夹读取
文件夹中会包含文件还有文件夹,我们想要取所有文件的话就需要递归调用并且判断是否时文件夹
function readDir(path) {
fs.readdir(path, { withFileTypes: true }, (err, files) => {
files.forEach((item) => {
//判断是否是文件夹
if (item.isDirectory()) {
console.log("获取到文件夹", item.name);
readDir(`${path}/${item.name}`);
} else {
console.log("获取到文件", item.name);
}
});
});
}
readDir("./new");
这周的分享就到这里吧,随后更多的node知识学过之后在继续分享