该 fs 为node的内置模块,所以安装nodejs之后,自然就可以直接使用 fs 模块;
var fs = require("fs");
node 插件查询: npmjs官网:https://www.npmjs.com/ 有了这些东西,就可以更愉快的敲代码了(滑稽)
这里是nodejs fs 模块API说明: fs中文文档: http://nodejs.cn/api/fs.html
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("文件创建成功!!!"); } });当重复执行这段代码时,不会重复生成多个文件,而是会覆盖原文件(包括内容)
修改文件内容: fs.writeFile(url, content, callback());
追加文件内容: fs.appendFile(url, appendContent, callback());
修改文件名字 - 移动文件位置: 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("文件名称修改成功!!!"); } });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); } });fs.unlink(url, callback(error));
参数参数类型备注urlString文件的路径callback()function执行该方法的回调函数实例:
// 删除当前文件夹下的 file.txt 的文件 fs.unlink("./file.txt", (error) => { if(error){ console.log("文件删除失败!!!错误提示信息:", error); }else{ console.log("文件删除成功!!!文件内容: "); } });fs.mkdir(url, callback());
参数参数类型备注urlString文件创建的路径callback()function执行该方法的回调函数实例:
// 在当前文件夹创建一个名为 folder 的文件夹 fs.mkdir("./folder", (error) => { if(error){ // 当创建文件失败时,系统会返回一个错误的提示信息,node将该信息作为一个回调参数置入 error 中 console.log("文件夹创建失败!!!错误提示信息:", error); }else{ console.log("文件夹创建成功!!!"); } });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("文件名称修改成功!!!"); } });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); } });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地址:https://gitee.com/PursuitComesFromLove//tree/master/node%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C
话说下面这些字,只有被神眷恋的人,才能看见哦:
开始上面的这些方法,在 cmd 命令里都可以操作哟!比如 创建文件夹: mkdir folderName完
