nodejs

第三章 node.js中的fs模块

2022-07-29  本文已影响0人  扶光_

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()删除文件

两个参数

  1. 要删除的文件路径
    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",
    ()=>{}
)
复制文件
上一篇 下一篇

猜你喜欢

热点阅读