• 简单了解一下:NodeJS的fs文件系统


    NodeJS提供了fs模块来本地文件。大致有这些内容:

    在这里插入图片描述

    文件读写

    在操作文件之前,我们需要检查一下这个文件是否存在,fs模块提供了access方法,语法如下:fs.access(path,mode,callback)

    path:就是文件路径
    mode:表示文件的可访问性,默认值是fs.constants.F_OK,这个值都是常量,有这几种类型:
    在这里插入图片描述
    callback:回调函数,返回的是检查文件的可访问情况,代码如下:

    const fs = require('fs');
    
    fs.access("./build.json", fs.constants.F_OK, (err) => {
       if(err){
        console.log("文件不存在",err);
        return;
       }
    
       console.log("文件存在")
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    正如山兔所示,当检查的文件不存在时候,就会返回对应的错误类型。

    相关的错误类型如下:
    在这里插入图片描述
    如果想通过同步的方法来执行的话,就调用这个方法accessSync()。

    文件读取

    readFile()和readFileSync()

    fs有两个方法来读取文件,分别是readFile()和readFileSync(),两个方法的区别是readFile方法为异步读取,readFileSync为同步读取。

    语法如下:

    fs.readFile(file,encoding,callback)
    fs.readFileSync(file,encoding)
    
    • 1
    • 2

    encoding:表示文件的编码格式,callback是回调函数【通常情况下,异步操作都会设置回调函数来处理结果】

    实例代码如下:

    const fs = require('fs');
    fs.readFile("./build.json", "ascii", (err, data) => {
       if (err) {
          console.log(err)
          return;
       }
    
       console.log("文件内容:", data)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果如下:
    在这里插入图片描述
    这是读取文件内容。如果需要将内容写入文件中,则有以下4个方法:

    1. writeFile();
    2. writeFileSync();
    3. appendFile();
    4. appendFileSync();

    writeFile()和writeFileSync()

    这两个方法的语法如下:

    fs.writeFile(file, data[, options], callback)
    fs.writeFileSync(file, data[, options])
    
    • 1
    • 2

    其中的参数data就是要写入文件的内容,以上面的代码为例,将读取到的内容写入另一个文件中【其实也就是新增一个文件】,修改后代码如下:

    const fs = require('fs');
    
    fs.readFile("./build.json", "ascii", (err, data) => {
       if (err) {
          console.log(err)
          return;
       }
    
       console.log("文件内容:", data);
    
       fs.writeFile("test.json", JSON.stringify({
          data,
          name: "duxin"
       }), "utf-8", (err) => {
          if (err) {
             throw error
          }
    
          console.log("异步写入文件完成")
       })
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    新增文件test.json的内容如下:

    {"data":"{\n    \"apps\": [\n        {\n            \"name\": \"build.json\",\n            \"script\": \"npm run start\"\n        }\n    ]\n}","name":"duxin"}
    
    • 1

    appendFile()方法和appendFileSync()方法

    这两个方法则是向文件追加内容,比如:

    fs.appendFile("test.json","添加测试内容",(err)=>{
       if(err){
          return;
       }
    
       console.log("添加完成")
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在上面的几个案例代码,添加了异常处理,这都是异步的异常处理,如果是同步操作,那么如何处理异常呢?

    答案是使用try-catch语句来处理,例如:

    //引入模块
    var fs = require('fs');
    //文件读取
    try {
         var data = fs.readFileSync('textfile.txt', 'utf8');
         console.log(data);
    } catch (e) {
         console.log(e);
    }
    //文件写入
    try {
         fs.writeFileSync('textfile.txt', 'Hello World .. !', 'utf8');
         console.log('完成文件写入操作');
    } catch (e) {
         console.log(e);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    截断文件

    当遇到文件太大的时候,一般情况我们会截取文件的一部分。那么在NodeJS中,就是通过truncate()方法来完成文件的截取。语法如下:

    fs.truncate(path[, len], callback)
    
    • 1

    path:就是要截取的文件名以及文件路径
    len:是一个整数,用于指定截断后文件的大小,单位是字节
    callback:用于指定截断文件操作完毕时执行的回调函数,该回调函数中使用一个参数,参数值为截断文件操作失败时触发的错误对象。

    但是len等于0的时候,截取后的文件为空

    案例代码:

    var fs = require('fs');
    fs.stat("poems.txt",function(err,stats){
         console.log("原文件大小为:"+stats.size+"字节")
    })
    fs.truncate('poems.txt', 140, function (err) {
         if (err) console.log('对文件进行截断操作失败。');
         else {
              fs.stat('poems.txt', function (err, stats) {
                   console.log('截断操作已完成\n文件大小为:' + stats.size + '字节。');
              });
         }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    unlink()方法,删除文件

    案例代码:

    fs.unlink("./test.json",(err)=>{
       if(err){
          console.log("文件删除报错了")
       }
    
       console.log("文件删除成功")
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    copyFile()方法与copyFileSync()方法复制文件

    语法如下:

    fs.copyFile(src, dest[, mode], callback)
    fs.copyFileSync(src, dest[, mode])
    
    • 1
    • 2

    src:要复制的源文件名。
    dest:要复制的目标文件名。
    mode:复制操作的修饰符,默认值为0。
    callback:回调函数。

    代码如下:

    fs.copyFile("fs.js","test.js",(err)=>{
       if(err){
          console.log("文件复制失败");
    
          return;
       }
    
       console.log("文件复制成功!")
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    创建目录:mkdir()和mkdirSync()方法

    创建目录,也就是创建文件夹,语法如下:

    fs.mkdir(path[, options], callback)
    fs.mkdirSync(path[, options])
    
    • 1
    • 2

    path:就是要创建文件的位置;
    options:指定这个文件的权限;
    callback:回调函数,返回一个参数,表示创建文件夹是否成功。

    读取目录

    通过readdir()方法或者readdirSync()方法来实现读取文件目录,语法如下:

    fs.readdir(path[, options], callback)
    
    • 1

    案例代码:

    const fs = require("fs");
    fs.readdir("src", (err, data) => {
      if (err) return;
      console.log(data)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5

    返回一个数组,是该文件夹下的一级目录:
    在这里插入图片描述

    删除目录,就是使用这个方法rmdir ()【只能删除空文件夹】

    获取文件或者文件夹信息,就用stat方法,返回文件的大小、类型等等信息,可以通过对应的属性来判断文件是否是文件夹,还是文件。例如:

    const fs = require("fs")
    fs.stat("b.txt", function (err, stats) {
         console.log("是否为文件", stats.isFile())
         console.log("是否为文件夹/目录", stats.isDirectory())
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这就是最近用到相关文件操作的API。

  • 相关阅读:
    Bootstrap警告和轮播插件详解【前端Bootstrap框架】
    【Arduino26】88点阵显示液晶对比度实验
    CMake入门实例、宏变量说明
    微服务治理之道:构建可伸缩和高可用的系统
    官方新动作!老子云3D开发SDK又更新:新增3D测量,路径动画
    Questasim与Visualizer的livesim仿真
    ControlNet原理及应用
    当元宇宙碰上图扑国风设计,科技与文化的虚实融合
    Go汇编语法和MatrixOne使用介绍
    【设计模式】装饰器模式(结构型)⭐⭐
  • 原文地址:https://blog.csdn.net/xuelian3015/article/details/133938923