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

【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乐事

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

相关文章:

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

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:Vscode 本文代码都经由博主PleaSure乐事实操后得出,可以放心使用。 1.FileSystem介绍 Node.js 的 fs(filesystem)模块是一个核心模块&#xff0c…...

问:LINUXWINDOWS线程CPU时间如何排序?

Linux 在Linux上,你可以使用ps命令结合sort命令来查看和排序进程或线程的CPU使用时间。 查看进程的CPU使用时间并按时间排序 使用ps命令的-o选项可以自定义输出格式,-e选项表示显示所有进程,--sort选项用于排序。 ps -e -o pid,tid,comm,…...

postgresql-重复执行相同语句,试试 prepare!

文章目录 每次你向 PostgreSQL 发送 SQL 语句时,数据库都必须对其进行解析(parse)。解析虽然很快,但如果同样的语句被解析一千次,这种操作累积起来可能会占用大量时间,而这些时间本可以用于处理其他事务。为避免这种情况&#xff…...

wpf加载带材料的3D模型(下载的3D预览一样有纹理)

背景:最近真的是忙啊,累出汁水了 整体效果: 放大可以看清砖头: 1、需要自己准备好3D模型,比如我这里是下载的这里的3D Warehouse,下载Collada File格式文件 2、解压可以看到一个model.dae和材料的文件夹&…...

【k8s之深入理解调度】调度框架扩展点理解

参考自 K8s 调度框架设计与 scheduler plugins 开发部署示例(2024) 调度插件扩展点 等待调度阶段PreEnqueuePod 处于 ready for scheduling 的阶段。 内部工作原理:sig-scheduling/scheduler_queues.md。在 Pod 被放入调度队列之前执行的插…...

音视频基础理论

1. 音频基础 1.1 音频基本概念 1.1 频率:声波的频率,即声音的音调,人类听觉的频率(音调)范围为20Hz--20KHz 1.2 振幅:即声波的响度,通俗的讲就是声音的高低,一般男生的声音振幅(响度)大于女生。 1.3 波形…...

《江苏科技大学学报(自然科学版)》

《江苏科技大学学报(自然科学版)》(双月刊,国内外公开发行)是由江苏省教育厅主管、江苏科技大学主办的理工类学术期刊,1986年创刊,国际刊号:ISSN1673-4807,国内刊号&…...

C++初学者指南-5.标准库(第二部分)–随机数生成

C初学者指南-5.标准库(第二部分)–随机数生成 文章目录 C初学者指南-5.标准库(第二部分)–随机数生成基本概念例子统一随机数布尔值(“抛硬币”)正态分布具有独立概率的整数 怎么做种子引擎使用自定义生成器 shuffle算法分布类型概述通用接口均匀分布采样…...

Unity2017在安卓下获取GPS位置时闪退的解决办法

在Unity使用低功耗蓝牙通信(BLE)需要用到设备的位置信息。但是调用Input.location.Start()程序会闪退。 解决办法:调用原生安卓接口。 参见《Unity2021通过aar调用Android方法》编写一个aar插件gpsplugin,在插件中提供获取GPS位…...

OpenGL ES 索引缓冲区(4)

OpenGL ES 索引缓冲区(4) 简述 本节会介绍索引缓冲区,索引缓冲区和顶点缓冲区类似,也是显存上的一段内存,只不过上面的数据用处不同,索引缓冲区故名思义里面的数据是用于索引,主要作用是用于复用顶点缓冲区里的数据。…...

01:(寄存器开发)点亮一个LED灯

寄存器开发 1、单片机的简介1.1、什么是单片机1.2、F1系列内核和芯片的系统架构1.3、存储器映像1.4、什么是寄存器 2、寄存器开发模板工程3、使用寄存器点亮一个LED4、代码改进15、代码改进2 本教程使用的是STM32F103C8T6最小系统板,教程来源B站up“嵌入式那些事”。…...

.Net 6.0 Windows平台如何判断当前电脑是否联网

最近在工作中开发需要判断当前电脑是否联网的需求,在网上找了一个调用window API来判断本机是否联网。具体请看下面介绍: 1.方法一(调用winAPI) [DllImport("wininet")] public static extern bool InternetGetConnec…...

微软准备了 Windows 11 24H2 ISO “OOBE/BypassNRO“命令依然可用

Windows 11 24H2 可能在未来几周内开始推出。 微软已经要求 OEM 遵循新的指南准备好 Windows 11 24H2 就绪的驱动程序,并且现在已经开始准备媒体文件 (.ISO)。 OEM ISO 的链接已在微软服务器上发布。 一个标有"X23-81971_26100.1742.240906-0331.ge_release_sv…...

MacOS 终端执行安装 Brew

在配置新的 Mac 环境时,如果你发现终端中无法识别 brew 命令,可以按照以下步骤进行解决。 步骤 1:确保网络稳定 为了避免安装过程中出现中断,建议使用 Wi-Fi 或有线连接,不推荐使用移动网络。 步骤 2:打…...

【设计模式-解释模式】

定义 解释器模式是一种行为设计模式,用于定义一种语言的文法,并提供一个解释器来处理该语言的句子。它通过为每个语法规则定义一个类,使得可以将复杂的表达式逐步解析和求值。这种模式适用于需要解析和执行语法规则的场景。 UML图 组成角色…...

51单片机应用开发(进阶)---数码管+按键+蜂鸣器(电磁炉显示模拟)

实现目标 1、加强数码管、按键的学习,实现数码显示变量数据(四位数的显示); 2、4位数码2个按键无源蜂鸣器实现模拟电磁炉功率调节及显示; 一、内容描述 功能描述:1、开机显示电磁炉功率300,每…...

Emergency Stop (ES)

文章目录 1. 介绍2. Feature List3. 紧急停止信号触发方式3.1 Port触发紧急停止信号3.2 SMU事件触发紧急停止信号3.3 软件触发紧急停止信号 4. 应用场景4.1 Port4.2 MSC 1. 介绍 Emergency Stop (ES)是Ifx System Control Units (SCU)六大模块之一。详细信息可以参考Infineon-…...

[C++][第三方库][gtest]详细讲解

目录 1.介绍2.安装3.使用1.头文件包含2.框架初始化接口3.调用测试样例4.TEST宏5.断言宏6.示例 1.介绍 gtest是一个跨平台的C单元测试框架,由Google公司发布gtest是为了在不同平台上为编写C单元测试而生成的,它提供了丰富的断言、致命和非致命判断、参数…...

【Java数据结构】 链表

【本节目标】 1. ArrayList 的缺陷 2. 链表 3. 链表相关 oj题目 一. ArrayList的缺陷 上节课已经熟悉了ArrayList 的使用&#xff0c;并且进行了简单模拟实现。通过源码知道&#xff0c; ArrayList 底层使用数组来存储元素&#xff1a; public class ArrayList<E>…...

前端——Ajax和jQuery

一、Ajax Ajax即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c; 通过 JS 异步的向服务器发送请 求并接收响应数据。 同步访问&#xff1a;当客户端向服务器发送请求时&#xff0c;服务器在处理的过程中&#xff0c;浏览器…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...