基于node的"文件CURD"操作以及"文件夹CURD"操作

基于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());

参数参数类型备注
urlString文件创建的路径
contentString文件的内容
[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 操作: (修改文件)
  1. 修改文件内容: fs.writeFile(url, content, callback());

  2. 追加文件内容: fs.appendFile(url, appendContent, callback());

  3. 修改文件名字 - 移动文件位置: fs.rename(oldPath, newPath, callback());

参数参数类型备注
urlString文件创建的路径
oldPathString文件原始路径(原文件名)
newPathString文件新的路径(新文件名)
contentString文件的内容
appendContentString文件追加的内容
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));

参数参数类型备注
urlString文件的路径
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));

参数参数类型备注
urlString文件的路径
callback()function执行该方法的回调函数

实例:

// 删除当前文件夹下的 file.txt 的文件
fs.unlink("./file.txt", (error) => {
	if(error){
		console.log("文件删除失败!!!错误提示信息:", error);
	}else{
		console.log("文件删除成功!!!文件内容: ");
	}
});


三、 文件夹CURD操作

文件夹C 操作: (创建文件夹)

fs.mkdir(url, callback());

参数参数类型备注
urlString文件创建的路径
callback()function执行该方法的回调函数

实例:

// 在当前文件夹创建一个名为 folder 的文件夹
fs.mkdir("./folder", (error) => {
	if(error){ // 当创建文件失败时,系统会返回一个错误的提示信息,node将该信息作为一个回调参数置入 error 中
		console.log("文件夹创建失败!!!错误提示信息:", error);
	}else{
		console.log("文件夹创建成功!!!");
	}
});

文件夹U 操作: (修改文件夹, 与文件操作类似)

fs.rename(oldFolder, newFolder, callback(error));

参数参数类型备注
urlString文件创建的路径
oldPathString文件原始路径(原文件名)
newPathString文件新的路径(新文件名)
callback()function执行该方法的回调函数

实例:

// 将当前文件下的文件 folder 更名为 newFolder
fs.rename("./oldFolder", "./newFolder", (error) => {
	if(error){
		console.log("文件名称修改失败!!!错误提示信息:", error);
	}else{
		console.log("文件名称修改成功!!!");
	}
});

文件夹R 操作: (读取文件夹内容 ‘读取文件夹下面的文件名称’)

fs.readdir(url, [{option}], callback())

参数参数类型备注
urlString文件创建的路径
[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));

参数参数类型备注
urlString需要删除文件夹的路径
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 地址

gitee地址:https://gitee.com/PursuitComesFromLove/CSDN/tree/master/node%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C

话说下面这些字,只有被神眷恋的人,才能看见哦:

开始上面的这些方法,在 cmd 命令里都可以操作哟!比如 创建文件夹: mkdir folderName

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值