【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.rhkb.cn/news/247958.html

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

相关文章

软件设计师——软件工程(五)

📑前言 本文主要是【软件工程】——软件设计师——软件工程的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

如何在群晖NAS部署office服务实现多人远程协同办公编辑文档

文章目录 本教程解决的问题是:1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是: 1.Word,PPT,Excel等重要文件存在本地环境,如何在编…

项目交付后,PM该如何做复盘总结?

2023已经收尾,那些让我们或焦灼、或紧急、或喜悦、或悲伤的项目也都交付完毕了。为了更好的总结工作成果与反思,各家单位开始一边排练年会舞蹈一边要求员工做出项目交付后复盘方案了,那么,怎样的复盘才会让项目工作更加明确&#…

【SpringBoot3】集成Knife4j、springdoc-openapi作为接口文档

一、什么是springdoc-openapi Springdoc-openapi 是一个用于生成 OpenAPI(之前称为 Swagger)文档的库,专为 Spring Boot 应用程序设计。它可以根据你的 Spring MVC 控制器、REST 控制器和其他 Spring Bean 自动生成 OpenAPI 文档&#xff0c…

【Docker】数据持久化 挂载

Docker的镜像是只读的,但是容器是可写的,我们可以将数据写入到容器,不过一旦容器删除数据将会丢 失,那么有什么办法能将数据进行持久化存储呢? ——在宿主机上开辟一块地方,存储内容和docker容器的存储内…

基于Vue uniapp和java SpringBoot的汽车充电桩微信小程序

摘要: 随着新能源汽车市场的迅猛发展,汽车充电桩的需求日益增长。为了满足市场需求,本课题开发了一款基于Java SpringBoot后端框架和Vue uniapp前端框架的汽车充电桩微信小程序。该小程序旨在为用户提供一个简洁高效的充电服务平台&#xff0…

Vite+Electron快速构建一个VUE3桌面应用(一)

一. 简介 首先,介绍下vite和Electron。 Vite是一种新型前端构建工具,能够显著提升前端开发体验。Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入Chromium和Node.js到二进制的 Electron 允许您保持一个 JavaScript 代码代码…

git仓库批量备份

git的mirror参数 在git中&#xff0c;--mirror是一个用于克隆和推送操作的参数。它用于创建一个镜像仓库&#xff0c;包含了源仓库的所有分支、标签和提交历史记录。 当使用git clone --mirror <source-repo>命令时&#xff0c;会创建一个完全相同的镜像仓库&#xff0…

ROS学习笔记11——ROS中的重名问题

一、ros功能包重名——ros工作空间覆盖 功能包重名时&#xff0c;会按照 ROS_PACKAGE_PATH 查找&#xff0c;在前的会优先执行。ROS 会解析 .bashrc 文件&#xff0c;并生成 ROS_PACKAGE_PATH ROS包路径&#xff0c;即调用功能包的顺序&#xff0c;该变量中按照 .bashrc 中配置…

《安富莱嵌入式周报》第331期:单片机实现全功能软件无线电,开源电源EEZ升级主控,ARM 汇编用户指南,UDS统一诊断服务解析,半导体可靠性设计手册

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 目录&#xff1a; 1、单片机实现低配版全功能软件无线电&#xff0c;范围0.5-30 MHz&#xff0c;支持SSB、AM、FM和CW …

websocket 通信协议

websocket是什么 答: 它是一种网络通信协议&#xff0c;是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 意思就是服务器可以主动向客户端推送信息&#xff0c;客户端也可以主动向服务器发送信息 属于服务器推送技术的一种. 为什么需要websocket? 疑问?…

python爬虫demo——爬取历史平均房价

简单爬取历史房价 需求 爬取的网站汇聚数据的城市房价 https://fangjia.gotohui.com/ 功能 选择城市 https://fangjia.gotohui.com/fjdata-3 需要爬取年份的数据&#xff0c;等等 https://fangjia.gotohui.com/years/3/2018/ 使用bs4模块 使用bs4模块快速定义需要爬取的…

安装mmcv-full(包括安装torch以及mmcv的离线安装方式)

文章目录 1. 安装torchtorch的下载链接 安装mmcv-fullmmcv-full的下载链接 在安装mmcv-full中通常需要安装torchmmcv-full。 1. 安装torch 在安装torch的时候&#xff0c;可以根据自身电脑是否有显卡&#xff0c;可以选择安装CPU版本还是GPU版本。mmcv-full也是同理。 安装to…

shell - 正则表达式和grep命令和sed命令

一.正则表达式概述 1.正则表达式定义 1.1 定义 使用字符串描述、匹配一系列符合某个规则的字符串 1.2 了解 普通字符&#xff1a; 大小写字母、数字、标点符号及一些其它符号元字符&#xff1a; 在正则表达式中具有特殊意义的专用字符 1.3 层次分类 基础正则表达式扩展正…

编写交互式 Shell 脚本

在日常的系统管理和自动化任务中&#xff0c;使用 Shell 脚本可以为我们节省大量时间和精力。 文章将以输入 IP 为例&#xff0c;通过几个版本逐步完善一个案例。 原始需求 编写一个交互式的 Shell 脚本&#xff0c;运行时让用户可以输入IP地址&#xff0c;并且脚本会将输入…

css 中 flex 布局最后一行实现左对齐

问题 flex 布局最后一行没有进行左对齐显示&#xff1a; <div classparent><div classchild></div><div classchild></div><div classchild></div><div classchild></div><div classchild></div><div…

Git初识

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 在学习Git之前我们先引入一…

异步任务的一些思考

前言 XXL-Job部署教程 项目中&#xff0c;必然少不了数据的导入导出&#xff0c;针对数据的导入导出简单复盘一下。 为了不占用资源消耗时间&#xff0c;影响用户体验&#xff0c;大量数据的导入导出一般都是异步执行 导入的时候&#xff0c;如果数据量很大&#xff0c;一次…

推荐一款Linux、数据库、Redis、MongoDB统一管理平台!

官方演示 状态查看 ssh 终端 文件操作 数据库操作 sql 编辑器 在线增删改查数据 Redis 操作 Mongo 操作 系统管理 账号管理 角色管理 资源管理 一.安装 1.下载安装包 cd /opt wget https://gitee.com/dromara/mayfly-go/releases/download/v1.7.1/mayfly-go-linux-amd64.zi…

StoryGPT-V——可以生成漫画故事的多模态大模型

前言 目前&#xff0c;大型模型在复杂故事可视化任务方面依然面临着重大挑战。这是因为此类任务需要对框架描述中的代词&#xff08;例如He、她、他们、他们&#xff09;进行解析&#xff0c;即在分辨率和确保跨帧的角色和背景融合方面进行详细解剖。尽管存在这些挑战&#xf…