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

news2024/11/26 5:55:39

作者: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.coloradmin.cn/o/2187523.html

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

相关文章

【MATLAB2024b】安装离线帮助文档(windows)

文章目录 一、在 MATLAB 设置中安装二、从math works 网站下载ISO:给无法联网的电脑安装 版本:matlab 2024b(或者大于等于2023a) 所需空间:10~15 GB 平台:Windows 需要注册math works账号。 一、在 MATLAB …

kubernets基础-ingress详细介绍

文章目录 什么是IngressIngress详细说明Ingress示例 Ingress控制器Ingress控制器的工作原理Ingress控制器的特点常见的Ingress控制器 Ingress关联Ingress控制器一、Ingress资源对象二、Ingress控制器三、Ingress与Ingress控制器的关联方式四、注意事项 多实例部署一、Ingress多…

《数据结构(刘大有)》学习(6)

系列文章目录 一、绪论 二、顺序表、链表 三、堆栈、队列 四、数组 五、字符串 六、树 目录 树的基本概念树的定义树的特点树的相关术语度层数高度路径二叉树定义特点定理满二叉树定义特点完全二叉树定义特点二叉树的存储结构顺序存储结点结构优点缺点 链式存储 结点结构…

带你深入浅出设计模式:四、原型模式:编程中的克隆技术

此为设计模式第四谈! 用总-分-总的结构和生活化的例子给你讲解设计模式! 码农不易,各位学者学到东西请点赞收藏支持支持! 开始部分: 总:原型模式的核心逻辑在于通过克隆现有实例来创建新对象&#xff0c…

(12)MATLAB莱斯(Rician)衰落信道仿真2补充:莱斯衰落信道与莱斯随机变量

文章目录 前言1.关于莱斯衰落信道仿真的两个公式2.由式(1)推出式(2) 前言 本文给出关于莱斯衰落信道仿真的两个公式之间的推导。 1.关于莱斯衰落信道仿真的两个公式 在上一篇《(11)MATLAB莱斯&#xff08…

不只是前端,后端、产品和测试也需要了解的浏览器知识(一)

目录标题 一、我们为什么要了解浏览器?1. 对于前端开发者2. 对于后端开发者 二、浏览器发展概述1. 宏观发展2. 微观发展 三、浏览器核心部件1. 浏览器界面介绍2. 目前浏览器的使用的渲染引擎和解释器总结3. 浏览器的解释器 四、各家浏览器目前的市场占比五、整体总结…

深度学习笔记18_TensorFlow实现猫狗识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境:Python 3.9 2.编译器:Pycharm 3.深度学习环境:TensorFlow 2.10.0 二、GPU设置…

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

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

SAP HCM 抓取模拟工资核算日志RT表数据

一:故事背景 SAP的核算其实比较麻烦的就是没地方可以导出核算成功的人员编号,即使能导出也是树形的结构,需要反复加工多次才能整理好员工,所以非常麻烦,今天就想能不能抓取模拟工资的rt表数据. 二:解决办法…

【项目记录】llama-7B基于llama.cpp在Qemu-riscv64向量扩展指令下的部署

概述 参考博客链接: Accelerating llama.cpp with RISC-V Vector Extension 基于RVV的llama.cpp在Qemu上的演示 Github相关链接: Llama.cpp中利用GGML中对RVV的支持1 Llama.cpp中利用GGML中对RVV的支持2 llama.cpp工程 2024/10/02: 工具准备OK&#…

Log4j的配置与使用详解

Log4j的配置与使用详解 Log4j介绍 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,我们可以控制每条日志的输出格式;只需要通过一个配置文件就可以灵活的配置&#xff0c…

Android SystemUI组件(11)SystemUIVisibility解读

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节思维导图,主要关注左侧最上方SystemUiVisibility解读部分即可。 本章节主要讲解SystemUiVisibility的概念及其相…

【EXCEL数据处理】000015案例 EXCEL公式与基础函数

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000015案例 EXCEL公式与基础函数。使用的软件&#x…

基础岛第3关:浦语提示词工程实践

模型部署 使用下面脚本测试模型 from huggingface_hub import login, snapshot_download import osos.environ[HF_ENDPOINT] https://hf-mirror.comlogin(token“your_access_token")models ["internlm/internlm2-chat-1_8b"]for model in models:try:snapsh…

Java--IO基本流

IO流 概述 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘…

昇思MindSpore进阶教程--二阶优化器THOR

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文介绍 深度学习训练过程可以看成损失…

Neo4j CQL语句 使用教程

CREATE命令 : CREATE (<node-name>:<label-name>{ <Property1-name>:<Property1-Value>........<Propertyn-name>:<Propertyn-Value>} )字段说明 CREATE (dept:Dept { deptno:10,dname:“Accounting”,location:“Hyderabad” })&#…

ATLAS/ICESat-2 L3B 每 3 个月网格动态海洋地形图 V001

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Monthly 3-Month Gridded Dynamic Ocean Topography V001 ATLAS/ICESat-2 L3B 每月 3 个月网格动态海洋地形图 V001 简介 该数据集包含中纬度、北极和南极网格上动态海洋地形&…

[Offsec Lab] ICMP Monitorr-RCE+hping3权限提升

信息收集 IP AddressOpening Ports192.168.52.218TCP:22,80 $ nmap -p- 192.168.52.218 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 de:b5:23:89:bb:9f:d4:1…

Kubernetes-Kind篇-01-kind搭建测试集群

1、Kind 介绍 官方文档地址&#xff1a;https://kind.sigs.k8s.io/ github仓库地址&#xff1a;https://github.com/kubernetes-sigs/kind 国内镜像仓库地址&#xff1a;https://gitcode.com/gh_mirrors/ki/kind/overview kind 是一种使用 Docker 容器 nodes 运行本地 Kubern…