当前位置: 首页 > news >正文

Node.js——fs(文件系统)模块

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

文章目录

    • 前言
    • writeFile 文件写入
    • appendFile 追加写入
    • writeFile 追加写入
    • createWriteStream 流式写入
    • readFile 文件读取
    • createReadStream 流式读取
    • 文件复制(同步)
    • 文件复制(流式)
    • rename 文件重命名
    • unlink / rm 文件删除
    • 文件夹操作
      • mkdir 创建文件夹
      • 递归创建文件夹
      • readdir 读取文件夹
      • rmdir 删除文件夹
      • 递归删除文件夹
    • stat 查看资源信息
    • __dirname & __filename
    • 总结

前言

Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。

我认为,作为一名前端开发人员,学习 Node.js 是非常有必要的!它可以充当服务端,补足前端程序员对服务端语言的欠缺。

本篇文章我们学习 Node.js 的 fs 模块(即文件系统模块)。


writeFile 文件写入

写入文件前要先导入 fs 模块,之后通过 writeFile 可以进行异步写入,通过 writeFileSync 可以进行同步写入。

writeFile 接口接收三个参数(从左到右依次为):

  • 要写入的文件名
  • 待写入的数据
  • 回调函数,处理 error 场景
const fs = require('fs');// 异步写入
// 文件名,待写入的数据,回调
fs.writeFile('./demo.txt', '积跬步至千里', (err) => {if (err) {console.log('写入文件失败');return;}console.log('写入文件成功');
})// 同步写入
// fs.writeFileSync('./demo2.txt', '积小流成江海');

终端执行 node xxx.js 即可看到打印的信息,若成功写入则将得到包含 积跬步至千里demo.txt 文本。

在这里插入图片描述

在这里插入图片描述


appendFile 追加写入

异步追加写入使用 appendFile 接口,同步追加写入使用 appendFileSync 接口。

  • \r\n 表示回车后换行
const fs = require('fs');// 异步追加写入
fs.appendFile('./demo.txt', '\r\n积小流成江海', (err) => {if (err) {console.log('err');return;}console.log('success');
})// 同步追加写入
// fs.appendFileSync('./demo.txt', '\r\n积小流成江海');

在这里插入图片描述

在这里插入图片描述


writeFile 追加写入

使用 writeFile 也可以实现追加写入,但要添加一个 flag 标识(如下代码的 { flag: 'a' })。

const fs = require('fs');// writeFile 实现追加写入,添加 flag
fs.writeFile('./demo.txt', '\r\n使用writeFile追加写入', { flag: 'a' }, err => {if (err) {console.log('err');return;}console.log('success');
})

在这里插入图片描述

在这里插入图片描述


createWriteStream 流式写入

使用 createWriteStream 创建写入流对象,调用 write 方法进行流式写入。

const fs = require('fs');// 流式写入:适合大文件写入或频繁写入
// 创建写入流对象
const writeStream = fs.createWriteStream('./流式写入.txt');writeStream.write("hello, ");
writeStream.write("node!\n");// 适用于需要结束数据传输的场景,例如写入文件或发送数据到客户端后关闭连接。
writeStream.end();// 适用于需要立即关闭流而不结束数据传输的场景,例如服务器关闭连接前执行一些清理工作。
// writeStream.close();// 流式写入完成时触发
writeStream.on('finish', () => {console.log("All writes are now complete.");
})

在这里插入图片描述

在这里插入图片描述


readFile 文件读取

使用 readFile 进行异步文件读取,使用 readFileSync 进行同步文件读取。

const fs = require('fs');// 异步文件读取
fs.readFile('./demo.txt', (err, data) => {if (err) {console.log(err);return;}console.log(data.toString());
})// 同步文件读取
// const data = fs.readFileSync('./demo.txt')
// console.log(data.toString());

在这里插入图片描述


createReadStream 流式读取

使用 createReadStrem 创建读取流对象。添加监听事件监听数据及读取完成。

const fs = require('fs');// 流式读取
// 创建读取流对象
const rs = fs.createReadStream('./demo.txt');rs.on('data', chunk => {console.log(chunk.length);
})rs.on('end', () => {console.log('读取完毕!');
})

在这里插入图片描述


文件复制(同步)

同步文件复制即先使用 readFileSync 读取文件,再把读取到的文件作为内容写入新文件。

const fs = require('fs');
const process = require('process');// 同步复制
const data = fs.readFileSync('./demo.txt');
fs.writeFileSync('./demo2.txt', data);
// 读取一个描述 Node.js 进程的内存使用量对象,所有属性值都以字节为单位。
console.log(process.memoryUsage());

在这里插入图片描述

在这里插入图片描述


文件复制(流式)

流式文件复制即先创建 流式读取对象流式写入对象,然后再基于流式读取的内容进行流式写入至新文件。

const fs = require('fs');
const process = require('process');// 流式复制
const readStream = fs.createReadStream('./demo.txt');
const writeStream = fs.createWriteStream('./demo3.txt');// 效果等同于 readStream.pipe(writeStream);
// readStream.on('data', chunk => {
//     writeStream.write(chunk)
// })readStream.on('end', () => {console.log(process.memoryUsage());
})readStream.pipe(writeStream);

在这里插入图片描述

在这里插入图片描述


rename 文件重命名

使用 rename 方法进行异步重命名文件;使用 renameSync 进行同步重命名文件。

const fs = require('fs');fs.rename('./demo.txt', './renameDemo.txt', err => {if (err) {console.log('err');return;}console.log('success');
})// fs.renameSync('./renameDemo.txt', './demo.txt');

在这里插入图片描述

在这里插入图片描述


unlink / rm 文件删除

使用 unlinkrm 进行文件的异步删除,使用 unlinkSyncrmSync 进行文件的同步删除。

const fs = require('fs')// 通过 unlink 删除,同步 unlinkSync
fs.unlink('demo.txt', err => {if (err) {console.log('err')return}console.log('success')
})// 通过 rm 删除,同步 rmSync
// fs.rm('demo2.txt', err => {
//     if (err) {
//         console.log('err')
//         return
//     }
//     console.log('success')
// })

在这里插入图片描述


文件夹操作

mkdir 创建文件夹

使用 mkdir 进行文件夹的创建。

const fs = require('fs')// 创建 createDir 文件夹
fs.mkdir('./createDir', err => {if (err) {console.log('err')return}console.log('success')
})

在这里插入图片描述

在这里插入图片描述


递归创建文件夹

使用 mkdir 可以进行递归创建文件夹(recursive - 是否以递归的方式创建目录,默认为 false)。

const fs = require('fs')// 递归创建
fs.mkdir('./a/b/c', {recursive: true}, err => {if (err) {console.log('err')return}console.log('success')
})

在这里插入图片描述
在这里插入图片描述


readdir 读取文件夹

使用 readdir 进行文件的读取操作。

const fs = require('fs')// 读取文件夹
fs.readdir('../../node-learn', (err, data) => {if (err) {console.log('err', err)return}console.log('data', data)
})

在这里插入图片描述


rmdir 删除文件夹

使用 rmdir 进行对文件夹的删除。

const fs = require('fs')// 删除文件夹
fs.rmdir('./createDir', err => {if (err) {console.log('err')return}console.log('success')
})

在这里插入图片描述


递归删除文件夹

使用 rm 进行递归删除文件夹(recursive: true 以递归的方式删除目录,默认为 false)。

const fs = require('fs')// 递归删除
fs.rm('./a', {recursive: true}, err => {if (err) {console.log('err')return}console.log('success')
})

在这里插入图片描述


stat 查看资源信息

提前准备好 demo.txt 文件,内容如下:

在这里插入图片描述

使用 stat 查看资源信息。

const fs = require('fs')fs.stat('./demo.txt', (err, data) => {if (err) {console.log('err')return}console.log(data)// 判断是否是文件console.log('判断是否是文件', data.isFile())// 判断是否是文件夹console.log('判断是否是文件夹', data.isDirectory())
})

在这里插入图片描述


__dirname & __filename

__dirname 表示当前文件所在目录的绝对路径。

__filename 表示当前文件所在目录的完整路径(包括文件名)。

const fs = require('fs')// 写入文件
fs.writeFileSync(__dirname + '/demo.txt', '绝对路径')// 所在文件的所在目录的绝对路径
console.log('__dirname', __dirname)
// 当前文件的完整路径(包含文件名)
console.log('__filename', __filename)

在这里插入图片描述


总结

本篇文章我们学习了如何使用 Node.js 进行文件操作。包括文件的写入、追加写入、流式写入、文件复制、文件重命名、文件删除、文件夹操作、查看资源信息和获取绝对路径等。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. Node.js教程(菜鸟教程)
  2. Node.js零基础视频教程(尚硅谷 · 李强)

在这里插入图片描述


相关文章:

Node.js——fs(文件系统)模块

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

SAP BC 同服务器不同client之间的传输SCC1

源配置client不需要释放 登录目标client SCC1...

CentOS: RPM安装、YUM安装、编译安装(详细解释+实例分析!!!)

目录 1.什么是RPM 1.1 RPM软件包命名格式 1.2RPM功能 1.3查询已安装的软件:rpm -q 查询已安装软件的信息 1.4 挂载:使用硬件(光驱 硬盘 u盘等)的方法(重点!!!) 1…...

linux音视频采集技术: v4l2

简介 在 Linux 系统中,视频设备的支持和管理离不开 V4L2(Video for Linux 2)。作为 Linux 内核的一部分,V4L2 提供了一套统一的接口,允许开发者与视频设备(如摄像头、视频采集卡等)进行交互。无…...

MySQL使用navicat新增触发器

找到要新增触发器的表,然后点击设计,找到触发器标签。 根据实际需要,填写相关内容,操作完毕,点击保存按钮。 在右侧的预览界面,可以看到新生成的触发器脚本...

voice agent实现方案调研

前言 目前语音交互主要的实现大体有两种: 级联方案,指的是,大规模语言模型 (LLM)、文本转语音 (TTS) 和语音转文本 (STT),客户的话通过vad断句到STT的语音转文本,经过大模型进行生成文本,生成文本后通过TTS进行回复给用户。(主流方案)端到端的方案,开发者无需再…...

TCP通信原理学习

TCP三次握手和四次挥手以及为什么_哔哩哔哩_bilibili...

Three.js 基础概念:构建3D世界的核心要素

文章目录 前言一、场景(Scene)二、相机(Camera)三、渲染器(Renderer)四、物体(Object)五、材质(Material)六、几何体(Geometry)七、光…...

如何用代码提交spark任务并且获取任务权柄

在国内说所有可能有些绝对,因为确实有少数大厂技术底蕴确实没的说能做出自己的东西,但其他的至少95%数据中台平台研发方案,都是集群中有一个持久化的程序,来接收任务信息,并向集群提交任务同时获取任务的权柄&#xff…...

关于Mac中的shell

1 MacOS中的shell 介绍: 在 macOS 系统中,Shell 是命令行与系统交互的工具,用于执行命令、运行脚本和管理系统。macOS 提供了多种 Shell,主要包括 bash 和 zsh。在 macOS Catalina(10.15)之前&#xff0c…...

【npm依赖包介绍】借助rimraf依赖包,在用npm run build构建项目时,清空dist目录,避免新旧混合

文章目录 背景如何使用附上rimraf的介绍和说明主要作用使用场景安装使用示例异步删除同步删除 参考资料 背景 在npm run build时,一般都会清空项目中已有的dist目录再构建,避免新旧混合。 如何使用 可以简单使用rimraf这个npm依赖包。 目前rimraf的最…...

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…...

Java Spring Boot实现基于URL + IP访问频率限制

点击下载《Java Spring Boot实现基于URL IP访问频率限制(源代码)》 1. 引言 在现代 Web 应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源,防止服务器过载或服务不可用,需要对接口的访问频率进行限制。本文将介绍如…...

C4D2025 win版本安装完无法打开,提示请将你的maxon App更新至最新版本,如何解决

最近安装C4D2025 win版本时,明明按步骤安装完成,结果打开提示提示请将你的maxon App更新至最新版本?遇到这种情况该如何解决呢。 一开始我的思路以为是旧版本没有删除干净,所以将电脑里有关maxon的软件插件都卸载了,重…...

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…...

SpringBoot环境和Maven配置

SpringBoot环境和Maven配置 1. 环境准备2. Maven2.1 什么是Maven2.2 为什么要学 Maven2.3 创建一个 Maven项目2.4 Maven核心功能2.4.1 项目构建2.4.2 依赖管理2.4.3 Maven Help插件 2.5 Maven 仓库2.5.1本地仓库2.5.2 中央仓库2.5.3 私有服务器, 也称为私服 2.6 Maven设置国内源…...

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…...

1.07 标准IO

1.思维导图 2.先编写以下结构体 struct Student { char name[20]; double math; double chinese; double english; double physical; double chemical; double…...

恒压恒流原边反馈控制芯片 CRE6289F

CRE6289F 系列产品是一款内置高压 MOS 功率开关管的高性能多模式原边控制的开关电源芯片。较少的外围元器件、较低的系统成本设计出高性能的交直流转换开关电源。CRE6289F 系列产品提供了极为全面和性能优异的智能化保护功能,包括逐周期过流保护、软启动、芯片过温保…...

Java中线程中断的几种方式,你了解吗?

Java中线程,可以使用 interrupt() 方法来实现线程的中断,那么,线程中中断的方式有几种呢?接下来,我们将介绍3种不同的线程中断方式,跟随我们的脚步,一起去看看! 目录 第一招&#xf…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...