一、fs文件系统模块
Node.js 的 API 内置有两个模块: path 和 fs ,我们使用 JavaScript 代码编写程序运行在 Node.js 环境中就可以操作文件
1.1、同步读取文件信息
同步读取:读取的时候,要等文件读取完毕后,才会执行后面的代码 (sync 同步)
const fs = require("fs"); const path = require("path"); let pathName = path.join(__dirname, 'hello.txt'); // const content = fs.readFileSync(pathName); 同步读取文件 // console.log(content); // console.log(content.toString()); const content = fs.readFileSync(pathName, "utf-8"); console.log(content);
1.2、异步读取文件信息
不用等待文件读取完毕就会执行后面的代码。
思考:如何读到后面的数据
答:在读取文件的时候,传递一个回调函数callback,当读取完毕后,回调函数执行,读取后面的数据
const fs = require("fs"); const path = require("path"); let pathName = path.join(__dirname, "hello2.txt"); // console.log(file); //参数1 要读取的文件 //参数2 设置读取到内容的编码,设置后读到的内容为字符串,如果不传则读到的数据为 buffer //参数3 回调函数,读取完文件后执行的代码 fs.readFile(pathName, "utf-8",(error, data)=>{ // console.log(error); // console.log(data); if(error){ console.log(error); return } console.log(data); });
1.3、异步写入
语法:fs.writeFile(文件路径,“改写入的内容”,“字符集编码”,回调函数)
写入成功后原文件内容被覆盖重写
const fs = require("fs"); const path = require("path"); let pathName = path.join(__dirname, "hello.txt"); fs.writeFile(pathName, "hello_write111", "utf-8",(error)=>{ console.log("error"); console.log("写完啦"); }); console.log("end");
1.4、读取当前路径下的文件名列表方法
遍历的结果为数组
const fs = require("fs"); fs.renameSync(旧文件名, 新文件名); //修改文件名 fs.readdirSync(__dirname); //读取当前路径下的文件名列表 let str = "hello"; str.endsWith("he"); //true str.startsWith("go"); //false str.substring(2,4) //ll 左闭右开区间 str.substring(2) //llo 下标为2取到结束
1.5、小案例
需求:把当前文件夹的js文件的名字都添加前缀 [day03],利用数组遍历(foreach)的方式去获取每一个数组名
const fs = require("fs"); let nameList = fs.readdirSync(__dirname); nameList.forEach(currFileName => { if(currFileName.endsWith(".js")){ fs.renameSync(currFileName, `[day03]${currFileName}`) } });
需求:把当前文件夹的名字都删除前缀 [day03]
const fs = require("fs"); let nameList = fs.readdirSync(__dirname); let str1 = "[day03]" nameList.forEach(currFileName => { if(currFileName.startsWith(str1)){ fs.renameSync(currFileName, currFileName.substring(str1.length)) } });
1.6、思考题
// 需求:现在存在三个文件 1.txt(我) 2.txt(爱) 3.txt(nodejs) // 每个文件里面有一个字符。使用:fs.readFile(异步) 顺序读取
1.txt 2.txt 3.txt 里面的内容,然后组成 我爱nodejs
把这个字符串写入 异步的写 到 data.txt 文件里面。
const fs = require("fs"); const path = require("path"); let pathName1 = path.join(__dirname,"files", "1.txt"); let pathName2 = path.join(__dirname,"files", "2.txt"); let pathName3 = path.join(__dirname,"files", "3.txt"); let pathName4 = path.join(__dirname,"files", "data.txt"); fs.readFile(pathName1,"utf-8",(error1, data1)=>{ if(error1){ console.log(error1); return } fs.readFile(pathName2,"utf-8",(error2, data2)=>{ if(error2){ console.log(error2); return } fs.readFile(pathName3,"utf-8",(error3, data3)=>{ if(error3){ console.log(error3); return } // console.log(data1+data2+data3); fs.writeFile(pathName4,data1+data2+data3,"utf-8",(error)=>{ console.log(data1+data2+data3); }) }) }) });