• 【Node.js】深度解析常用核心模块-fs模块


    ✅ 作者简介:一名将要迈入大三的大学生,致力于提高前端开发能力
    ✨ 个人主页:前端小白在前进的主页
    🔥 系列专栏 : node.js学习专栏
    ⭐️ 个人社区 : 个人交流社区

    🔥前言

    在文章👉Node.js — 前端高薪之路绕不过去的坎👈中我们已经知道了什么是node.js,以及它能够做些什么,在这里的话就先从它的基础 ==> 常用的内置模块讲起,由易到难,循序渐进的帮助大家掌握这门技术!

    在这里插入图片描述

    fs 文件系统模块

    什么是fs文件模块系统

    fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求,该模块的所有方法都有同步和异步两种方式。
    JavaScript 的是没有操作文件的能力,但是 Node 是可以做到的,Node 提供了操作文件系统模块,是 Node 中使用非常重要和高频的模块,是绝对要掌握的一个模块系统。

    • fs 模块中所有的操作都有两种形式可供选择:同步和异步
    • 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码
    • 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回,然后可以立即向下执行代码
    • 一般情况下我们使用的都是异步方式!比起同步,异步方法性能更高,速度更快,而且没有阻塞。

    打开文件

    格式 : fs.open(path, flags[, mode], callback)
    path : 文件的路径
    flags : 文件打开的行为。具体值详见下方表格
    mode : 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
    callback : 回调函数,带有两个参数如:callback(err, fd)

    打开模式(flags)说明
    r以读取模式打开文件。如果文件不存在抛出异常。
    r+以读写模式打开文件。如果文件不存在抛出异常。
    rs以同步的方式读取文件。
    rs+以同步的方式读取和写入文件。
    w以写入模式打开文件,如果文件不存在则创建。
    wx类似 ‘w’,但是如果文件路径存在,则文件写入失败。
    w+以读写模式打开文件,如果文件不存在则创建。
    wx+类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
    a以追加模式打开文件,如果文件不存在则创建。
    ax类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
    a+以读取追加模式打开文件,如果文件不存在则创建。
    ax+类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

    示例代码:

    const fs = require('fs')
    fs.open('./file/new成绩.txt','r+',function(err,result) {
        if(err) {
            return console.log('打开文件失败' + err.message);
        } 
        console.log('打开文件成功' + result);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    在这里,首先要导入fs模块,node中导入模块需要使用内置的require()方法,这里的回调函数中,如果文件存在的话err会返回null,在js中null会默认转换为false,如果文件不存在的话,则err会返回一个错误对象,错误对象会转化为true,从而在这里去写一个判断输出逻辑!

    获取文件信息

    语法格式 : fs.stat(path, callback)
    path : 文件路径
    callback : 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

    stats类中的方法:

    方法描述
    stats.isFile()如果是文件返回 true,否则返回 false。
    stats.isDirectory()如果是目录返回 true,否则返回 false。
    stats.isBlockDevice()如果是块设备返回 true,否则返回 false。
    stats.isCharacterDevice()如果是字符设备返回 true,否则返回 false。
    stats.isSymbolicLink()如果是软链接返回 true,否则返回 false。
    stats.isFIFO()如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。
    stats.isSocket()如果是 Socket 返回 true,否则返回 false。

    示例代码:

    const fs = require('fs')
    fs.stat('./file/new成绩.txt', function (err, stats) {
        if (err) {
            return console.error(err);
        }
        console.log("读取文件信息成功!");
        // 检测文件类型
        console.log("是否为文件(isFile) ? " + stats.isFile());
        console.log("是否为目录(isDirectory) ? " + stats.isDirectory());    
     });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    获取文件信息用的更多的方法是isFile()isDirectory(),主要是来判断该文件是否属于文件或者是否属于目录!

    读取文件

    语法格式 : fs.readFile(path[, options], callback)

    path:文件路径

    • options:配置选项,若是字符串则指定编码格式
      • encoding:编码格式
      • flag:打开方式
    • callback:回调函数
      • err:错误信息
      • data:读取的数据,如果未指定编码格式则返回一个 Buffer
        示例代码 :
    const fs = require('fs')
    fs.readFile('./file/11.txt','utf-8',function(err,data) {
        console.log(err);
        console.log('--------');
        console.log(data);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    写入文件

    语法格式 : fs.writeFile(file, data[, options], callback)
    file:文件路径
    data:写入内容
    options:配置选项,包含 encoding, mode, flag;若是字符串则指定编码格式
    callback:回调函数

    示例代码 :

    const fs = require('fs')
    
    fs.writeFile('./file/2.txt','hello node.js','utf-8',function(err,data) {
        //如果文件写入成功,则err的值等于null    null可以转化为false
        //如果写入文件失败,则err是一个错误对象
        console.log(err);
        if(err) {
            return console.log('文件写入失败' + err.message);
        }
        console.log('文件写入成功');
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    路径动态拼接问题

    • 在使用 fs 模块操作文件时,如果提供的操作路径是以./ 或 ../开头的相对路径时,容易出现路径动态拼接错误的问题
    • 原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径
    • 解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,从而防止路径动态拼接的问题
    • __dirname 可以获取文件所处的绝对路径
      示例代码 :
    const fs = require('fs')
    fs.readFile(`${__dirname}/file/11.txt`,'utf-8',function(err,data) {
        if(err) {
           return console.log('文件读取失败' + err.message);
        }
        console.log(__dirname);  //D:\node复盘\01
        console.log('文件读取成功!' + data);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    在这里打印了__dirname,我们可以发现,打印出来的路径和我们终端打开文件的绝对路径是一样的,所以这样的话就可以解决我们有时候使用.././时出现的路径问题了!

    其他操作

    验证路径是否存在:

    • fs.exists(path, callback)
    • fs.existsSync(path)

    删除文件:

    • fs.unlink(path, callback)
    • fs.unlinkSync(path)

    列出文件:

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

    截断文件:

    • fs.truncate(path, len, callback)
    • fs.truncateSync(path, len)

    建立目录:

    • fs.mkdir(path[, mode], callback)
    • fs.mkdirSync(path[, mode])

    删除目录:

    • fs.rmdir(path, callback)
    • fs.rmdirSync(path)

    重命名文件和目录:

    • fs.rename(oldPath, newPath, callback)
    • fs.renameSync(oldPath, newPath)

    监视文件更改:

    • fs.watchFile(filename[, options], listener)

    关闭文件 :

    • fs.close(fd, callback)

    小结

    本篇文章主要是学习fs模块的常用api,其实最常用的就是读写操作,其他的操作了解即可,node中使用最多的一个知识点就是回调函数,通过回调函数得以实现多处功能,近期我将会出一篇js的回调函数文章,帮助大家更轻松的学会回调!如果大家对其他的fs操作有兴趣的话可以在菜鸟教程中学习了解!

  • 相关阅读:
    JavaEE进阶3
    Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。
    基于MATLAB的人民币识别系统
    单商户商城系统功能拆解19—订单管理
    【C语言】 getchar()与EOF的疑难杂症
    DBeaver报错:can‘t load driver class ‘com.mysql.cj.jdbc.Driver‘
    【mmWave】一、IWR6843ISK-ODS毫米波雷达【固件烧写和上手使用】流程
    Linux12 crontab 定时任务 at 一次性任务
    Java-集合框架
    炫龙T6-E7A2电脑如何U盘重装系统解决系统故障教学
  • 原文地址:https://blog.csdn.net/m0_52040370/article/details/126470349