fs全称为(file system)文件系统
先引入fs模块
const fs = require("fs");
1.1读取文件内容fs.readFile() (异步操作)
readFile方法里面有两个参数
第一个参数是要读取文件的路径,第二个参数是读取完文件执行的回调函数
fs.readFile(
"./03.js",
()=>{
console.log("文件读取完成");
}
)
console.log(1);
readFile
因为读取文件是异步操作,所以后输出,同步比异步快
node回调函数的设计理念
1.1.1radfile中回调函数中第一个参数
回调函数里的第一个参数为错误对象,异步行为出错,我们要看到这个错误(没有错误为null)
例,我们将一个文件地址写错
const fs = require("fs");
fs.readFile(
"./3.js",
(err)=>{
console.log(err);
}
)
console.log(1);
出错
那么出错我们怎么检验出来呢 可以用if
fs.readFile(
"./3.js",
(err)=>{
if(err){
//开放着决定怎么做
// 1.打印错误console.log(err);(不会中断)
//2.直接让程序抛出错误 (程序中断)
//3.还可以写入日志文件
throw new Error(err)
}
}
)
1.1.2radfile中回调函数中第2个参数
读取到的文件内容
引入的文件内容为:
文件内容
打印文件内容:
fs.readFile(
"./firstFile.txt",
(err,body)=>{
if(err){
//开放着决定怎么做
// 1.打印错误console.log(err);(不会中断)
//2.直接让程序抛出错误 (程序中断)
//3.还可以写入日志文件
// throw new Error(err)
return
}
console.log(body); //打印文件内容
}
)
输出内容
因为在后端所有的程序都是buffer读取的,所以为以上的那样
(Buffer在nodejs的javaScript中是一个对象,与数组非常类似,它的元素为16进制的两位数,即0到255的数值。)
那么我们想得到里面真正的数据应该怎么做,
两种方法
1 body.toString() 变成字符串
2在文件路径下写"utf-8"
1.2readFileSync()同步方法
sync是单词synchronization的缩写模式,中文译为同步
如故意将路径写错,那么下面的666就不会输出出来
const fs = require("fs");
//同步方法 不需要回调函数,出错直接抛出
fs.readFileSync("./irstFile.txt","utf-8");
console.log(666);
例
那么我们不希望同步代码的抛错影响后面代码的执行该怎么办呢?
可以使用try catch来捕获错误,从而让报错不影响后面代码执行
const fs = require("fs");
//同步方法 不需要回调函数,出错直接抛出
try {
fs.readFileSync("./irstFile.txt","utf-8");
} catch (error) {
console.log(error);
}
console.log(666);
例
正常使用同步
//同步方法 不需要回调函数,出错直接抛出
try {
let body = fs.readFileSync("./firstFile.txt","utf-8");
console.log(body);
} catch (error) {
console.log(error);
}
console.log(666);
同步
2.修改文件writeFile()
2.1替换修改
替换掉原理文件的内容
const fs = require("fs");
//修改文件
fs.writeFile(
"./firstFile.txt",
"我不喜欢你了",
(err)=>{
if(err)console.log(err);
console.log("文件修改完成");
}
)
修改完成
2.2追加修改
在原本文件内容的基础上追加数据
需在writeFile第三个参数加入{flag:"a"}
下面列举flag的参数
R 读取文件.如果文件不存在时抛出异常
R+ 读取并写入.如果文件不存在时抛出异常
RS 以同步方式读取文件并通知操作系统忽略本地文件系统缓存.如果文件不存在时抛出异常
W 写入文件.如果文件不存在时则创建该文件.如果文件已存在则清空文件内容
W+ 读取并写入文件.如果文件不存在时则创建该文件.如果文件已存在则清空文件内容
WX 作用与w“类似.但是以排他方式打开文件
WX+作用与“W+”类似.但是以排他方式打开文件
A 以追加方式写入文件.如果文件不存在时则创建该文件
A+读取并以追加方式写入文件.如果文件不存在时则创建该文件
AX作用与“a”类似。但是以排他方式打开文件
AX+作用与“a+”类似。但是以排他方式打开文件
fs.writeFile(
"./firstFile.txt",
"烦人",
{
flag:"a" //追加数据
},
(err)=>{
if(err)console.log(err);
console.log("文件修改完成");
}
)
追加数据
3.创建目录
3.1mkdir(路径,回调函数)
const fs = require("fs")
fs.mkdir("./fileName",(err)=>{ //要在上层文件夹就是../ 以此类推
console.log(err);
})
mkdir
注意创建文件夹的名字遵循windows文件夹命名规则,不得包括( /)、(\ )、 ( |)、 (:)、 (?)、 (“”)、 () 、(<) 、(>)*
3.2递归创建目录
可以在文件中创建文件
第二个参数加{recursive:true}
const fs = require("fs")
fs.mkdir("./fileName",(err)=>{
console.log(err);
})
递归
4. 重命名文件
4.1 rename()
三个参数
1.文件路径
2.要修改的新文件路径即名字
3.回调函数
const fs = require("fs")
fs.rename(
"./fileName",
"./new",
err=>{
if(err)console.log(err);
}
)
rename
4.2rename 还可以移动位置
将原本wrap文件夹下的01 移动到new文件下01
const fs = require("fs")
fs.rename(
"./warp/01",
"./new/01",
err=>{
if(err)console.log(err);
}
)
移动位置
不能移动不存在的文件夹.否则会报错
5 删除
5.1unlink()删除文件
两个参数
- 要删除的文件路径
2.回调函数
将new文件夹下的01文件删除
const fs = require("fs")
fs.unlink(
"./firstFile.txt",
(err)=>{
if(err)console.log(err);
}
)
成功删除
5.2rmdir()删除文件夹、
image.png删除new文件夹下的01文件
const fs = require("fs")
fs.rmdir(
"./new/01",
(err)=>{
if(err)console.log(err);
}
)
删除
以上这种方法只能删除空目录
5.3递归删除
如果要删除的这个文件夹下有其他文件,那么就要写{recursive:true}在第二个参数中
推荐使用rm来删除 ,rm
既可以删文件也可以删文件夹
6 读取文件
6.1readdir()
读取目录
const fs = require("fs");
fs.readdir(
"../01",
(err,msg)=>{
if(err){return}
console.log(msg);
}
)
例
7 复制文件
const fs = require("fs");
fs.link(
"../01/file1/msg.txt",
"../03/msg1.txt",
()=>{}
)
复制文件
网友评论