基于node的"文件CURD"操作以及"文件夹CURD"操作
文章目录
一、 node 准备
引入依赖模块
该 fs
为node的内置模块,所以安装nodejs之后,自然就可以直接使用 fs
模块;
var fs = require("fs");
node 插件查询: npmjs官网:https://www.npmjs.com/ 有了这些东西,就可以更愉快的敲代码了(滑稽)
这里是nodejs fs
模块API说明: fs中文文档: http://nodejs.cn/api/fs.html
二、 文件CURD操作
C 操作: (创建文件)
fs.writeFile(url, content, [option], callback());
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件创建的路径 |
content | String | 文件的内容 |
[option] | Object | {encoding:“utf-8”,flag:“w”} |
callback() | function | 执行该方法的回调函数 |
实例:
// 在当前路径创建一个名为 file.txt 的文件, 文件内容 “create by code”
fs.writeFile("./file.txt", "create by code", {"flag":"w"}, function(error){
if(error){ // 当创建文件失败时,系统会返回一个错误的提示信息,node将该信息作为一个回调参数置入 error 中
console.log("文件创建失败!!!错误提示信息:", error);
}else{
console.log("文件创建成功!!!");
}
});
当重复执行这段代码时,不会重复生成多个文件,而是会覆盖原文件(包括内容)
U 操作: (修改文件)
-
修改文件内容:
fs.writeFile(url, content, callback());
-
追加文件内容:
fs.appendFile(url, appendContent, callback());
-
修改文件名字 - 移动文件位置:
fs.rename(oldPath, newPath, callback());
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件创建的路径 |
oldPath | String | 文件原始路径(原文件名) |
newPath | String | 文件新的路径(新文件名) |
content | String | 文件的内容 |
appendContent | String | 文件追加的内容 |
callback() | function | 执行该方法的回调函数 |
实例:
// fs.appendFile(url, appendContent, callback())
// 为 file.txt 文件, 追加文件内容 “append words!!!”
fs.appendFile("./file.txt", appendContent, (error) => {
if(error){
console.log("文件内容追加失败!!!错误提示信息:", error);
}else{
console.log("文件内容追加成功!!!");
}
});
// fs.rename(oldPath, newPath, callback())
// 修改 file.txt 文件的名称为: “newName.txt”
fs.rename("./file.txt", "./newName.txt", (error) => {
if(error){
console.log("文件名称修改失败!!!错误提示信息:", error);
}else{
console.log("文件名称修改成功!!!");
}
});
R 操作: (读取文件内容)
fs.readFile(url, callback(error, data));
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件的路径 |
callback() | function | 执行该方法的回调函数 |
实例:
// 读取当前文件夹下的 file.txt 的文件内容
// |error: 错误提示信息;data: 成功时,文件内容
fs.readFile("./file.txt", (error, data) => {
if(error){
console.log("文件读取失败!!!错误提示信息:", error);
}else{
console.log("文件读取成功!!!文件内容: ", data);
}
});
D 操作: (删除文件)
fs.unlink(url, callback(error));
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件的路径 |
callback() | function | 执行该方法的回调函数 |
实例:
// 删除当前文件夹下的 file.txt 的文件
fs.unlink("./file.txt", (error) => {
if(error){
console.log("文件删除失败!!!错误提示信息:", error);
}else{
console.log("文件删除成功!!!文件内容: ");
}
});
三、 文件夹CURD操作
文件夹C 操作: (创建文件夹)
fs.mkdir(url, callback());
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件创建的路径 |
callback() | function | 执行该方法的回调函数 |
实例:
// 在当前文件夹创建一个名为 folder 的文件夹
fs.mkdir("./folder", (error) => {
if(error){ // 当创建文件失败时,系统会返回一个错误的提示信息,node将该信息作为一个回调参数置入 error 中
console.log("文件夹创建失败!!!错误提示信息:", error);
}else{
console.log("文件夹创建成功!!!");
}
});
文件夹U 操作: (修改文件夹, 与文件操作类似)
fs.rename(oldFolder, newFolder, callback(error));
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件创建的路径 |
oldPath | String | 文件原始路径(原文件名) |
newPath | String | 文件新的路径(新文件名) |
callback() | function | 执行该方法的回调函数 |
实例:
// 将当前文件下的文件 folder 更名为 newFolder
fs.rename("./oldFolder", "./newFolder", (error) => {
if(error){
console.log("文件名称修改失败!!!错误提示信息:", error);
}else{
console.log("文件名称修改成功!!!");
}
});
文件夹R 操作: (读取文件夹内容 ‘读取文件夹下面的文件名称’)
fs.readdir(url, [{option}], callback())
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 文件创建的路径 |
[option] | Object | {encoding:编码方式,withFileTypes,false} |
callback() | function | 执行该方法的回调函数 |
实例:
// 读取当前文件下的文件 folder 的内容
fs.readdir("./folder", (error, data) => {
if(error){
console.log("文件夹读取失败!!!错误提示信息:", error);
}else{
console.log("文件夹读取成功!!!文件夹内容: ", data);
}
});
文件夹D 操作: (删除文件夹 ‘这个算是fs中最麻烦的操作了。。。。’)
node的内置对象fs是不允许直接删除非空文件夹的,所以在删除文件夹时,需要先删除文件夹内部的所有文件
fs.rmdir(url, callback(error));
参数 | 参数类型 | 备注 |
---|---|---|
url | String | 需要删除文件夹的路径 |
callback() | function | 执行该方法的回调函数 |
实例:1. 删除空文件夹
// 删除空文件夹
fs.rmdir("./folder", (error) => {
if(error){
console.log("文件夹删除失败!!!错误提示信息:", error);
}else{
console.log("文件夹删除成功!!!");
}
});
实例:2. 删除非空文件夹(递归)
// 这个是比较基础的,当删除的文件夹中嵌套文件夹,并且嵌套的文件夹非空,就会删除失败
// 删除文件
function delFile(url){
return new Promise(resolve => {
fs.unlink("./" + url, (error) =>{
if(error)console.log(error)
else resolve();
}); // 当前路径下的 url 文件
});
}
function delFolder(){
// 遍历目录
fs.readdir("./folder",(error, dir) => {
if(error) console.log(error)
else{
if(dir.length > 0){
delFile(dir[0]).then(()=>{ // 不能使用for遍历
delfolder(); // 直到文件夹中的文件数量为空
});
}
}
});
// 为什么这里要用递归,而不用for循环删除呢?
// 主要是因为:fs的普通操作都属于异步操作
// 也就是说,当使用for删除的时候,可能,还没有删除结束,但是rmdir()方法就开始执行了,这样依然会删除失败(folder依然有文件)
fs.rmdir("./folder", (error) => {
if(error){
console.log("文件夹删除失败!!!错误提示信息:", error);
}else{
console.log("文件夹删除成功!!!");
}
});
}
相对于其他删除方法来说,递归是比较简单的解决方法,但是递归的稳定性就不一定了。。。
于是乎,我又发现了某些了不得的方法,让我们继续。。。
实例:3. 删除非空文件夹(cmd)
是的,你没有看错!就是cmd命令删除!!!简单!!!实用!!!可靠!!!您值得拥有!!!!
引入依赖包: npm i node-cmd
var cmd = require("node-cmd");
cmd.get("rmdir /s/q folder");
// 啊!我完事儿了~
有了这些指令包之后,我们有时候就能更愉快的操作文件了
四、 部分相关原代码 gitee 地址
话说下面这些字,只有被神眷恋的人,才能看见哦:
开始上面的这些方法,在 cmd 命令里都可以操作哟!比如 创建文件夹: mkdir folderName
完