【Node.js】fs与path模块的基础使用

文章目录

  • 前言
  • 一、什么叫做模块
  • 二、fs模块
    • 2.1 fs模块是干什么的?
    • 2.2 fs模块的使用
      • 导入fs模块
      • 读取文件的内容
      • 写入文件内容
      • 处理路径问题
      • path路径模块
  • 总结


前言

在Node.js中,fs模块(文件系统模块)是一个重要的核心模块,它提供了对文件系统进行各种操作的能力。无论是读取文件内容、写入文件,还是创建、删除目录,fs模块都是不可或缺的工具之一。本文将深入探讨fs模块的基础使用,帮助开发者更好地理解如何在Node.js环境中进行文件操作,从而为构建文件处理相关的应用打下坚实基础。


一、什么叫做模块

在Node.js中,模块是一种组织和封装代码的机制,用于将应用程序拆分为独立且可维护的部分。每个模块都有自己的作用域,可以包含变量、函数、类等,这样可以有效地避免全局作用域的污染和命名冲突。

二、fs模块

2.1 fs模块是干什么的?

fs 模块是 Node.js 中的一个核心模块,用于处理文件系统操作。它提供了一系列的方法,使得你可以对文件和目录进行读取、写入、更新、删除等操作。以下是一些常见的 fs 模块的功能:

文件读写操作: fs 模块提供了读取和写入文件的方法,可以同步或异步地进行操作。这包括了文本文件和二进制文件的读写。

目录操作: 可以创建、删除、读取目录,以及获取目录下的文件列表等。

文件和目录信息: 提供了获取文件和目录信息的方法,如文件大小、创建时间、修改时间等。

文件重命名和删除: 可以通过 fs.rename() 方法进行文件重命名,通过 fs.unlink() 方法删除文件。

文件流操作: fs 模块支持使用文件流进行读写操作,这对于处理大型文件或流式数据非常有用。

文件权限操作: 可以设置和获取文件的权限信息,以及判断当前用户对文件的权限。

符号链接操作: 提供了创建、读取和删除符号链接的方法。

总的来说,fs 模块为 Node.js 提供了丰富的文件系统操作功能,使得开发者可以轻松地进行文件和目录的处理,适用于各种应用场景,从简单的文件读写到复杂的文件系统操作。通过这个模块,Node.js 可以方便地与本地文件系统进行交互,是构建文件处理和文件管理应用的重要工具。

2.2 fs模块的使用

导入fs模块

我们可以使用require函数导入指定的模块
参数填我们要导入的模块名称,我们可以通过使用返回值操作这个模块

const fs = require('fs')

读取文件的内容

语法格式:

fs.readFile(path[,options],callback)

用中括号表示是可选的参数
参数解读
参数1:必选参数,字符串,表示文件的路径。
参数2:可选参数,表示以什么编码格式来读取文件
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果

示例代码:

const fs = require('fs')fs.readFile('./fsTest.txt','utf8',(err,data)=>{console.log(data)console.log('--------------------------------')console.log(err)
})

中间的就是我们的可选参数

在这里插入图片描述
这样我们就把文件里面的东西读出来了。
回调函数的第一个参数是判断是否有错误的如果成功则返回null,如果读取失败,则 err 的值为 错误对象,
data 的值为 undefined、第二个参数是文件里面的数据

err可以通过message打印里面的错误信息

写入文件内容

语法格式:

fs.writeFile(file, data[, options], callback)

参数解读:
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2:必选参数,表示要写入的内容
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
参数4:必选参数,文件写入完成后的回调函数。

示例代码:

const fs = require('fs')fs.writeFile('./fsTest.txt','Hello Write File',(err)=>{console.log(err)
})

回调函数的第一个参数是判断是否有错误的如果成功则返回null,如果读取失败,则 err 的值为 错误对象,err可以通过message打印里面的错误信息
在这里插入图片描述
除了上面这个还有一个尾添加的函数,上面那个写了会把原来的覆盖,如果你不想覆盖可以使用下面这个:

fs.appendFile(file, data[, options], callback)

示例代码:

const fs = require('fs');const filePath = 'example.txt';
const newData = 'This data will be appended to the file.';// 使用 fs.appendFile 追加数据到文件
fs.appendFile(filePath, newData, 'utf8', (err) => {if (err) {console.error('Error appending to file:', err);} else {console.log('Data appended to file successfully.');}
});

处理路径问题

为什么会出现这个问题:
在使用 fs 模块操作文件时,如果提供的操作路径是以 ./或 …/ 开头的相对路径时,很容易出现路径动态拼接错误的问题.
原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径.

面对这个问题,我们可以提供完整的路径,但是这个方法可维护性不好
node.js提供了一个变量,表示当前文件的路径__dirname我们可以使用它来解决

path路径模块

Node.js 中的 path 模块用于处理文件路径和目录路径,提供了一些实用的方法来操作路径字符串。path 模块是 Node.js 核心模块之一,因此无需额外安装即可使用。

路径的拼接:

path.join()

使用示例:

const path = require('path')const str = path.join('/a','/b/c','../','./d','e')console.log(str);

在这里插入图片描述


总结

通过本文,我们对Node.js中的fs模块有了基础的了解,并学会了如何读取文件、写入文件,以及进行简单的目录操作。文件系统操作是Node.js应用中常见的任务之一,熟练使用fs模块将使开发者能够更高效地处理文件相关操作,提升应用的文件管理能力。在实际项目中,深入学习和灵活运用fs模块将成为打造强大Node.js应用的重要一环。希望本文能够为你在Node.js文件系统操作方面的学习提供帮助,愿你在Node.js的世界中编程愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统】调用硬盘并且实现MBR与Loader的过渡——实战篇

一.概述 有了上一篇文章:【操作系统】调用硬盘并且实现MBR与Loader的过渡——原理篇的理论支持,我们就可以开始代码实操了,接下来我们将优化MBR程序,使其从扇区中读取出loader加载器,并将其存放到内存处,将…

springboot(ssm环保网站 绿色环保宣传系统Java系统

springboot(ssm环保网站 绿色环保宣传系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7&#xff0…

C++ easyX小程序:画五角星

//本小程序通过调用easyX的moveto、lineto函数画出五角星编写了FiveStar函数&#xff0c;在调用这个函数时setbkcolor、setlinecolor、setfillcolor设置了背景、线及填充颜色&#xff0c;又调用floodfill函数对五角星进行颜色填充。 //代码及注释如下&#xff1a; #include<…

excel怎么设置密码?轻松保护您的工作表

在数字化时代&#xff0c;数据的安全性显得尤为重要。excel作为我们日常工作中广泛使用的办公软件&#xff0c;其中可能包含了大量的敏感数据。为了确保这些数据不被未授权的人访问&#xff0c;本文将为您详细介绍excel怎么设置密码&#xff0c;从而有效地保护您的数据安全。 方…

基于Redis的高可用分布式锁——RedLock

目录 RedLock简介 RedLock工作流程 获取锁 释放锁 RedLock简介 Redis作者提出来的高可用分布式锁由多个完全独立的Redis节点组成&#xff0c;注意是完全独立&#xff0c;而不是主从关系或者集群关系&#xff0c;并且一般是要求分开机器部署的利用分布式高可以系统中大多数存…

delphi fmxui 做的一些跨平台app

pascal语音显然已经没落&#xff0c;但delphi还在坚挺着&#xff0c;每年都会发布新版本&#xff0c; 主要是做跨平台应用。 如果你觉得qt qml 写android app 比较麻烦&#xff0c;那可以尝试delphi 12&#xff0c;可以用c builder 尝试 android&#xff0c;ios 开发 下面的…

【Spring连载】使用Spring Data访问Redis(一)----快速指南

【Spring连载】使用Spring Data访问Redis&#xff08;一&#xff09;----快速指南 一、导入依赖二、Hello World程序 一、导入依赖 在pom.xml文件加入如下依赖就可以下载到spring data redis的jar包了&#xff1a; <dependency><groupId>org.springframework.boot…

适用于 Windows 7/8/10/11电脑的 12 款顶级数据恢复软件

很多时候&#xff0c;我们在 Windows 7 /8/10/11下不小心按了删除键&#xff0c;从而丢失了硬盘或 USB 驱动器中的重要文件和数据。在某些情况下&#xff0c;病毒或软件错误可能会损坏您的硬盘&#xff0c;从而影响您的文件。在这种情况下&#xff0c;您迫切需要一款适用于 Win…

STM32——点灯

STM32——点灯 1.开发准备 开发环境:keil5&#xff0c;STM32CubeMX 开发语言:C语言 烧录工具:ST-Link 库函数:HAL库 2.点灯 常用的GPIO HAL库函数&#xff1a; //GPIO初始化 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); //调制电平 void H…

怎么创建docker镜像

创建Docker镜像可以通过以下几个步骤&#xff1a; 编写Dockerfile&#xff1a;Dockerfile是一个文本文件&#xff0c;定义了镜像的构建过程。在Dockerfile中&#xff0c;可以指定基础镜像、添加应用程序代码和依赖、设置环境变量、运行命令等。根据应用程序的需求&#xff0c;编…

Labview 图像处理系统设计

1. 总体主界面设计 前面板界面如下&#xff1a; 界面总共分为一个实时采集加拍照控制模块&#xff0c;两个图像显示模块&#xff08;实时图像显示和直方图显示&#xff09;以及三个图像处理模块 前面板中各模块具体功能及使用说明如下&#xff1a; 1.当实时按钮关闭时&#x…

mysql .ibd 文件过大清理方法

问题 有一个 info_track 表用来临时存储告警推送数据&#xff0c;逻辑处理完成后&#xff0c;会执行 Delete 语句删除对应的记录。 问题&#xff1a;项目现场运行了几个月后&#xff0c;发现磁盘空间莫名占用了过多的存储&#xff0c;> 100GB&#xff0c;且无法释放。 生…

javaScript遍历数组的一些方法

1&#xff0c;for循环 for循环是最基础并且是比较常用的一种 let arr[1,2,3,4,5]for(let i0;i<arr.length;i){//分别输出1,2,3,4,5console.log(arrarr[i])} 2&#xff0c;for...of循环 使用for...of循环可以遍历数组&#xff0c;并且直接获取里面的每个元素 let arr[1,2,…

向上调整向下调整算法

目录 AdjustUp向上调整 AdjustDown向下调整 AdjustUp向上调整 前提是&#xff1a;插入数据之后&#xff0c;除去插入的数据其他的数据还是为堆 应用&#xff1a;插入数据。 先插入一个10到数组的尾上&#xff0c;再进行向上调整算法&#xff0c;直到满足堆。 性质&#xff1…

【每日一题】YACS 473:栈的判断

这是上海计算机学会竞赛 P 473 P473 P473&#xff1a;栈的判断&#xff08; 2021 2021 2021年 8 8 8月月赛 丙组 T 4 T4 T4&#xff09;标签&#xff1a;栈题意&#xff1a;给定 n n n个数字&#xff0c;已知这些数字的入栈顺序为 1 , 2 , 3... , n 1,2,3...,n 1,2,3...,n&…

1.30贪心(简单)

目录 1.分发饼干 2. ​​​​​​​种花问题 3. 赢得比赛需要的最少训练时长 1.分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让…

基础算法(二)

一 高精度计算 int能表示范围为2^32&#xff0c;这看起来很大&#xff0c;但在大数据时代的如今&#xff0c;不说是int 哪怕是long long也是不够的&#xff0c;那么为了使用或计算这些超出或远超整形大小的数&#xff0c;我们这些数的计算方法称为高精度计算。 &#xff08;1)…

代码随想录 Leetcode113. 路径总和 II

题目&#xff1a; 代码(首刷看解析 2024年1月30日&#xff09;&#xff1a; class Solution { public:vector<int> temp;vector<vector<int>> res;void recursion(TreeNode* cur, int sum) {if (!cur->left && !cur->right && sum 0…

QT 打开项目时显示 “No valid settings file could be found” 错误信息

QT 打开项目时显示“No valid settings file could be found”的错误信息&#xff0c;这通常意味着找不到有效的设置文件。此时&#xff0c;可以尝试以下几种解决方案&#xff1a; 删除项目中的.user文件。这是QT自动生成的用户设置文件&#xff0c;有时候会因为某些原因导致文…

Java进击框架:Spring-WebFlux(九)

Java进击框架&#xff1a;Spring-WebFlux&#xff08;九&#xff09; 前言Mono和FluxSpring WebFlux反应的核心DispatcherHandler带注释的控制器WebFlux配置 WebClient配置retrieve()交换请求正文Filters属性语境同步使用测试 RSocket反应库 前言 Spring框架中包含的原始web框…