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零基础视频教程(尚硅谷 · 李强)

在这里插入图片描述


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

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

相关文章

Microsoft Azure Cosmos DB:全球分布式、多模型数据库服务

目录 前言1. Azure Cosmos DB 简介1.1 什么是 Azure Cosmos DB?1.2 核心技术特点 2. 数据模型与 API 支持2.1 文档存储(Document Store)2.2 图数据库(Graph DBMS)2.3 键值存储(Key-Value Store)…

2025年华为OD上机考试真题(Java)——整数对最小和

题目: 给定两个整数数组array1、array2,数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值。 注意:两对元素如果对应…

7 分布式定时任务调度框架

先简单介绍下分布式定时任务调度框架的使用场景和功能和架构,然后再介绍世面上常见的产品 我们在大型的复杂的系统下,会有大量的跑批,定时任务的功能,如果在独立的子项目中单独去处理这些任务,随着业务的复杂度的提高…

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法 一、前言二、欧盟《通用数据保护条例》(GDPR)2.1 背景2.2 主要内容2.3 特点2.4 实施效果与影响 三、美国《加利福尼亚州消费者隐私法案》(CCPA)3.1 背景3.2 主要内…

“AI智能陪练培训服务系统,让学习更轻松、更高效

大家好,我是资深产品经理小李,今天咱们来侃侃一个新兴的教育辅助工具——AI智能陪练培训服务系统。这个系统可谓是教育培训行业的一股新势力,它究竟有什么神奇之处呢?下面我就跟大家伙儿好好聊聊。 一、什么是AI智能陪练培训服务系…

notebook主目录及pip镜像源修改

目录 一、notebook主目录修改二、pip镜像源修改 一、notebook主目录修改 在使用Jupyter Notebook进行数据分析时,生成的.ipynb文件默认会保存在Jupyter的主目录中。通常情况下,系统会将Jupyter的主目录设置为系统的文档目录,而文档目录通常位…

如何利用百炼智能体编排应用轻松搭建智能AI旅游助手?

各位小伙伴儿,好哈! 在上一篇文章《5分钟基于阿里云百炼平台搭建专属智能AI机器人》中我们体验了如何利用阿里云百炼平台的智能体应用搭建专属智能机器人。 它的配置过程相对简单,其“对话式”的输出形式也十分直观,非常适合初学…

计算机视觉目标检测-DETR网络

目录 摘要abstractDETR目标检测网络详解二分图匹配和损失函数 DETR总结总结 摘要 DETR(DEtection TRansformer)是由Facebook AI提出的一种基于Transformer架构的端到端目标检测方法。它通过将目标检测建模为集合预测问题,摒弃了锚框设计和非…

【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)

文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起,正向定位到当前行的首个字符 b2 从光标位置起,反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…

springboot 默认的 mysql 驱动版本

本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…

计算机网络(二)——物理层和数据链路层

一、物理层 1.作用 实现相信计算机节点之间比特流的透明传输&#xff0c;尽可能屏蔽具体传输介质和物理设备的差异。 2.数据传输单位 比特。 3.相关通信概念 ①信源和信宿&#xff1a;即信号的发送方和接收方。 ②数据&#xff1a;即信息的实体&#xff0c;比如图像、视频等&am…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

AI数字人+文旅:打造数字文旅新名片

在数字化浪潮的推动下&#xff0c;人工智能技术正以前所未有的速度渗透到我们生活的每一个角落。特别是在文化和旅游领域&#xff0c;AI数字人的出现&#xff0c;不仅为传统文旅产业注入了新的活力&#xff0c;也为游客带来了全新的体验。 肇庆AI数字人——星湖 “星湖”是肇…

做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)

图&#xff1a; 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据&#xff0c;支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…

Protobuf编码规则详解

Protobuf编码规则详解 1 Message 结构1.1 tag1.1.1 字段编号(field_num)1.1.2 传输类型(wire_type) 1.2 字段顺序1.3 默认值 2 编码2.1 Varint编码2.1.1 Varint编码过程2.1.2解码过程2.1.3 存储2.1.4 小结2.2 有符号整数(sint32和sint64)编码的问题与zigzag优化 3 编码实践3.1测…

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 报错内容&#xff1a; exec /entrypoint.sh: no such file or directory查看文件正常在此路径&#xff0c;但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。

计算机的错误计算(二百零七)

摘要 利用两个数学大模型计算 arccot(0.125664e2)的值&#xff0c;结果保留16位有效数字。 实验表明&#xff0c;它们的输出中分别仅含有3位和1位正确数字。 例1. 计算 arccot(0.125664e2)的值&#xff0c;结果保留16位有效数字。 下面是与一个数学解题器的对话。 以上为与…

MCANet: 基于多模态字幕感知的大语言模型训练无关视频异常检测

目录 摘要01 引言02 相关工作2.1 视频异常检测2.2 基于视频的大语言模型&#xff08;VLLMs&#xff09; 03 方法论3.1 问题定义3.2 MCANet3.3 图像字幕分支3.4 音频字幕分支3.5 基于LLM的异常评分3.6 视频-文本分数优化 04 实验4.1 数据集和评估指标4.2 实现细节4.3 定性结果4.…

WMS仓库管理系统,Vue前端开发,Java后端技术源码(源码学习)

一、项目背景和建设目标 随着企业业务的不断扩展&#xff0c;仓库管理成为影响生产效率、成本控制及客户满意度的重要环节。为了提升仓库作业的透明度、准确性和效率&#xff0c;本方案旨在构建一套全面、高效、易用的仓库管理系统&#xff08;WMS&#xff09;。该系统将涵盖库…

【Uniapp-Vue3】创建自定义页面模板

大多数情况下我们都使用的是默认模板&#xff0c;但是默认模板是Vue2格式的&#xff0c;如果我们想要定义一个Vue3模板的页面就需要自定义。 一、我们先复制下面的模板代码&#xff08;可根据自身需要进行修改&#xff09;&#xff1a; <template><view class"…