美文网首页nodejs
第三章 node.js中的fs模块

第三章 node.js中的fs模块

作者: 扶光_ | 来源:发表于2022-07-29 12:46 被阅读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",
    ()=>{}
)
复制文件

相关文章

  • 八:Node文件系统管理

    导入:var fs = require("fs") 定义:Node.js 文件系统(fs 模块)模块中的方法均有异...

  • node.js文件操作

    fs 文件操作用的模块为node.js中的fs模块.因此要提前将其引入. var fs = require('fs...

  • 关于node.js一些模块的记录「FS模块」

    目录 Node.JS教程 FS模块 Path模块 FS模块 Path模块 Node.js path 模块提供了一些...

  • 2016,9,13

    ##node.js的学习 #node.js的fs模块 var fs = require('fs'); functi...

  • Node进阶 ---- fs

    1. fs模块 在Node.js中,使用fs模块来实现所有有关文件及目录的创建、写入及删除操作。 在fs模块中,所...

  • Nodejs的模块引入与回调函数

    Node.js模块系统 在 Node.js 中,引入一个模块 如: var http=require('fs');...

  • Node.js

    一、入门 1.fs模块 search node.js fs 文档(文件系统模块) 2.http模块 search ...

  • 3-廖雪峰-node-fs模块

    fs文件读取模块 Node.js内置的fs模块就是文件系统模块,负责读写文件。 和所有其它JavaScript模块...

  • Day11 文件系统

    fs模块 Node.js内置的fs模块就是文件系统模块,负责读写文件。和所有其它JavaScript模块不同的是,...

  • Node.js基本模块

    fs模块 node.js内置的fs模块就是文件系统模块,负责读写文件。与所有其他JavaScript模块不同的是,...

网友评论

    本文标题:第三章 node.js中的fs模块

    本文链接:https://www.haomeiwen.com/subject/jvofwrtx.html