【Node.js】内置模块FileSystem的保姆级入门讲解

作者:CSDN-PleaSure乐事

欢迎大家阅读我的博客 希望大家喜欢

使用环境:Vscode

本文代码都经由博主PleaSure乐事实操后得出,可以放心使用。

1.FileSystem介绍

Node.js 的 fs(filesystem)模块是一个核心模块,提供了与文件系统进行交互的功能。它允许你读取、写入、删除和管理文件和目录。fs 模块提供了同步和异步两种方式来执行文件操作,使得编写者可以根据具体需求选择合适的方法。

2.FileSystem基本操作介绍

在正式进行FileSystem前,我们需要创建一个js文件,并对fs模块进行导入:

//方法一
import fs from 'fs'
//方法二
const fs = require('fs');

2.1创建目录

如果我们想要创建目录,我们仅需要使用mkdir即可,fs.promises.mkdir会进行目录创建,其中recursive是用来控制是否允许创建多级目录,若设置为true则允许创建多级目录,反之false则不能创建。

const createDir = async (path) => {try {await fs.promises.mkdir(path, { recursive: true }) // recursive: true 允许递归创建多级目录console.log("目录创建成功")} catch (err) {console.error(`目录创建失败: ${err}`)}}
let dir = "PleaSure/csdn/"
createDir(dir) //创建多级目录

如下图所示,我们已经成功创建了一个多级目录:

2.2写入文件

如果我们要写入文件,我们需要使用writeFile来处理,fs.promises.writeFile会进行文件写入。但是需要注意,我们最好添加path.join来处理不同电脑间路径不一致的情况,在 Windows 系统中,路径分隔符通常是反斜杠(\),而在 Unix 和类 Unix 系统(如 Linux 和 macOS)中,路径分隔符是正斜杠(/)。

const writeFile = async (filePath, content) => {try {await fs.promises.writeFile(filePath, content);console.log("文件写入成功");} catch (err) {console.error(`文件写入失败: ${err}`);}
};// 定义目录和文件路径
let dir = "PleaSure/csdn/";
let name = "web.txt";let filePath = path.join(dir, name); // 使用 path.join 来处理路径// 创建目录
createDir(dir).then(() => {// 写入文件writeFile(filePath, content);
});

但是需要注意,这里的写入文件是会覆盖的! 

2.3追加文件

 追加文件则直接使用appendFile即可,fs.promises.appendFile会进行文件追加,内容将被写在文件最后:

const appendToFile = async (filePath, content) => {try {await fs.promises.appendFile(filePath, content);console.log("内容追加成功");} catch (err) {console.error(`内容追加失败: ${err}`);}};// 定义目录和文件路径let dir = "PleaSure/csdn/";let name = "web.txt";let filePath = path.join(dir, name); // 使用 path.join 来处理路径// 创建目录createDir(dir).then(() => {// 追加内容到文件appendToFile(filePath, "pleasure\n"); // 追加内容并换行});

2.4读取文件

如果想要读取文件,我们增加readFIle即可,fs.promises.readFile会完成文件读取,输出文件内容:

const readFile = async (filePath) => {try {const data = await fs.promises.readFile(filePath, 'utf8');console.log("文件内容:");console.log(data);} catch (err) {console.error(`文件读取失败: ${err}`);}};

2.5检查文件或目录是否存在

我们可以使用access来判断文件或目录是否存在,fs.promises.access会完成检查,从而判断下一步操作怎么办,例如创建新的目录等等:

const checkDirExists = async (dirPath) => {try {await fs.promises.access(dirPath, fs.constants.F_OK);console.log(`目录 ${dirPath} 存在`);return true;} catch (err) {console.log(`目录 ${dirPath} 不存在`);return false;}
};

检查目录或文件是否存在可以帮助我们判断是否需要进行新建文件或目录操作,防止有重名等情况的发生:

checkDirExists(dir).then((exists) => {if (!exists) {// 如果目录不存在,则创建目录return createDir(dir);}return Promise.resolve(); // 目录已存在,直接返回一个 resolved 的 Promise
}).then(() => {// 写入文件return writeFile(filePath, content);
}).then(() => {// 追加内容到文件return appendToFile(filePath, "pleasure\n"); // 追加内容并换行
}).then(() => {// 读取文件return readFile(filePath);
});

2.6获取目录详细信息

使用stat可以来获取目录详细信息,例如创建时间、修改时间、大小等,我们使用birthtime等即可完成相应信息的调取:

const getDirInfo = async (dirPath) => {try {const stats = await fs.promises.stat(dirPath);if (stats.isDirectory()) {console.log(`目录 ${dirPath} 的详细信息:`);console.log(`- 大小: ${stats.size} 字节`);console.log(`- 创建时间: ${stats.birthtime}`);console.log(`- 修改时间: ${stats.mtime}`);console.log(`- 访问时间: ${stats.atime}`);console.log(`- 是否为目录: ${stats.isDirectory()}`);console.log(`- 是否为文件: ${stats.isFile()}`);console.log(`- 是否为符号链接: ${stats.isSymbolicLink()}`);} else {console.log(`${dirPath} 不是一个目录`);}} catch (err) {console.error(`无法获取目录 ${dirPath} 的信息: ${err}`);}
};

最终可以得到这样的效果:

2.7文件或目录重命名

入伏哦我们想要完成目录或文件重命名,我们可以使用rename就可以达到效果,fs.promises.rename为完整写法:

const renameFileOrDir = async (oldPath, newPath) => {try {await fs.promises.rename(oldPath, newPath);console.log(`重命名成功: ${oldPath} -> ${newPath}`);} catch (err) {console.error(`重命名失败: ${err}`);}};

此时我们可以看到文件名已经被修改了:

2.8删除文件

若想要删除文件,我们直接调用unlink即可完成,fs.promises.unlink会帮助进行文件删除:

const deleteFile = async (filePath) => {try {await fs.promises.unlink(filePath);console.log(`文件删除成功: ${filePath}`);} catch (err) {console.error(`文件删除失败: ${err}`);}
};

此时文件也已经被顺利删除了。

2.9删除目录

如果我们想要删除整个目录,可以使用 fs.promises.rmdir 方法来删除空目录,或者使用 fs.promises.rm 方法来删除非空目录。fs.promises.rm 方法提供了更多的选项,比如递归删除目录及其内容。:

const deleteDir = async (dirPath) => {try {await fs.promises.rm(dirPath, { recursive: true, force: true });console.log(`目录删除成功: ${dirPath}`);} catch (err) {console.error(`目录删除失败: ${err}`);}
};

此时想要删除的目录也已经被删掉了。

3.最终结果:

此时查看控制台,可以看到如下结果,我们从头到尾,从创建到删除的每一步,都顺利执行:

完成每一步操作的代码都可以在文章中获得,若有需要欢迎收藏文章,反复擦写,感谢您的阅读!

作者:CSDN-PleaSure乐事

希望我的博客对您有帮助,也希望在对您有帮助时您可以为我留下点赞收藏与关注,这对我真的很重要,谢谢!

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

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

相关文章

C++入门基础知识97——【关于C++ 条件运算符 ? :】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 条件运算符 ? :的相关内容&#xff…

【PCL】Ubuntu22.04 安装 PCL 库

文章目录 前言一、更新系统软件包二、安装依赖项三、下载 PCL 源码四、编译和安装 PCL五、测试安装成功1、 pcd_write.cpp2、CMakeLists.txt3、build 前言 PCL(Point Cloud Library)是一个开源的大型项目,专注于2D/3D图像和点云处理。PCL为点…

在WPF中实现多语言切换的四种方式

在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…

【折半查找】

目录 一. 折半查找的概念二. 折半查找的过程三. 折半查找的代码实现四. 折半查找的性能分析 \quad 一. 折半查找的概念 \quad 必须有序 \quad 二. 折半查找的过程 \quad \quad 三. 折半查找的代码实现 \quad 背下来 \quad 四. 折半查找的性能分析 \quad 记住 比较的是层数 …

git 报错git: ‘remote-https‘ is not a git command. See ‘git --help‘.

报错内容 原因与解决方案 第一种情况:git路径错误 第一种很好解决,在环境变量中配置正确的git路径即可; 第二种情况 git缺少依赖 这个情况,网上提供了多种解决方案。但如果比较懒,可以直接把仓库地址的https改成ht…

Android 简单实现联系人列表+字母索引联动效果

效果如上图。 Main Ideas 左右两个列表左列表展示人员数据,含有姓氏首字母的 header item右列表是一个全由姓氏首字母组成的索引列表,点击某个item,展示一个气泡组件(它会自动延时关闭), 左列表滚动并显示与点击的索引列表item …

Elasticsearch 8.16 和 JDK 23 中的语言环境变化

作者:来自 Elastic Simon Cooper 随着 JDK 23 即将发布,语言环境信息中有一些重大变化,这将影响 Elasticsearch 以及你提取和格式化日期时间数据的方式。首先,介绍一些背景知识。 什么是语言环境? 每次 Java 程序需要…

理解Matplotlib构图组成

介绍 Matplotlib 是 Python 中最流行的数据可视化库之一。它提供了一系列丰富的工具,可以绘制高度自定义且适用于各种应用场景的图表。无论你是数据科学家、工程师,还是需要处理数据图形表示的任何人,理解如何操作和定制 Matplotlib 中的图表…

三、数据链路层(上)

目录 3.1数据链路层概述 3.1.1术语 3.1.2功能 3.2封装成帧和透明传输 3.2.1封装成帧 ①字符计数法 ②字符(节)填充法 ③零比特填充法 ④违规编码法 3.2.2透明传输 3.2.3差错控制 差错原因 检错编码 奇偶校验 ☆循环冗余码CRC 例题 纠错…

骨架屏 (懒加载优化)

骨架屏 (懒加载优化) 即便通过 Webpack 的按需加载、CDN 静态资源缓存 和 代码分割 等技术来减少首屏的代码体积,首屏加载时的白屏时间(也称为首屏等待时间)仍然可能存在,尤其在网络条件较差或页面内容复杂…

MongoDB 快速入门+单机部署(附带脚本)

目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…

python全栈学习记录(二十一)类的继承、派生、组合

类的继承、派生、组合 文章目录 类的继承、派生、组合一、类的继承二、派生三、组合 一、类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类。 继承的特性是:子类会遗传父类的属性(继承是类与类之间的关系&a…

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛(也就是华为杯),也是和本校的两个数学学院的朋友在网上组的队伍。昨天(9.25)通宵干完论文(一条…

Prompt 初级版:构建高效对话的基础指南

Prompt 初级版:构建高效对话的基础指南 文章目录 Prompt 初级版:构建高效对话的基础指南一 “标准”提示二 角色提示三 多范例提示四 组合提示五 规范化提示 本文介绍了提示词的基础概念与不同类型,帮助用户更好地理解如何在对话中构建有效的…

Pytorch实现玉米基因表达量预测模型

一、实验要求 通过搭建残差卷积网络,实现对玉米基因表达量的预测 二、实验目的 理解基因表达量预测问题:基因表达预测是生物信息学和基因组学领域中的重要任务之一,促进学科交叉融合。熟悉深度学习框架PyTorch:通过实现基因表达量…

css 数字比汉字要靠上

这个问题通常是由于数字字体的下排的问题造成的,也就是数字的底部边缘位置比汉字的顶部边缘位置更靠下。为了解决这个问题,可以尝试以下几种方法: 使用CSS的vertical-align属性来调整对齐方式。例如,可以将数字的对齐方式设置为to…

Linux高级编程_27_系统调用

文章目录 系统调用函数分类系统编程概述系统调用概述**类UNIX系统的软件层次** 用户态和内核态系统调用与库函数的关系文件操作符概述文件磁盘权限 系统调用之文件操作open:打开文件close:关闭文件write:写入read:读取 文件状态fcntl 函数stat 函数 st_mode的值示例 1&#xff…

【优选算法之队列+宽搜/优先级队列】No.14--- 经典队列+宽搜/优先级队列算法

文章目录 前言一、队列宽搜示例:1.1 N 叉树的层序遍历1.2 ⼆叉树的锯⻮形层序遍历1.3 ⼆叉树最⼤宽度1.4 在每个树⾏中找最⼤值 二、优先级队列(堆)示例:2.1 最后⼀块⽯头的重量2.2 数据流中的第 K ⼤元素2.3 前 K 个⾼频单词2.4 …

数造科技入选中国信通院《高质量数字化转型产品及服务全景图》三大板块

9月24日,2024大模型数字生态发展大会暨“铸基计划”年中会议在北京召开。会上,中国信通院发布了2024年《高质量数字化转型产品及服务全景图(上半年度)》和《高质量数字化转型技术解决方案(上半年度)》等多项…

网络编程篇:UDP协议

一 UDP协议格式 16位源端口号:表示数据从哪里来。16位目的端口号:表示数据要到哪里去。16位UDP长度:表示整个数据报(UDP首部UDP数据)的长度。16位UDP检验和:如果UDP报文的检验和出错,就会直接将…