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

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac M2基于MySQL 8.4.3搭建(伪)主从集群

前置准备工作 安装MySQL 8.4.3 参考博主之前的文档,在本地Mac安装好MySQL:Mac M2 Pro安装MySQL 8.4.3安装目录:/usr/local/mysql,安装好的MySQL都处于运行状态,需要先停止MySQL服务最快的方式:系统设置 …

第5章——与HTTP协作的Web服务器

第5章——与HTTP协作的Web服务器 用单台虚拟主机实现多个域名 ​ 一台服务器可以使用虚拟主机功能拥有多个域名。 ​ 域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。当请求发送到服务器时,已经是以IP地址形式访问了。 ​ 相同的…

基于Python的投资组合收益率与波动率的数据分析

基于Python的投资组合收益率与波动率的数据分析 摘要:該文通过研究马科维茨的投资组合模型,并将投资组合模型应用到包含6只金融股票的金融行业基金中。首先通过开源的财经接口Tushare获取股票原始数据,接着利用数据分析的黄金组合库&#xf…

AWS re:Invent 2024 现场实录 - It‘s all about Scale

时隔五年,再度造访美国,也是同样的主题,参加在拉斯维加斯举行的 AWS re:Invent 大会。 会场 从 2012 起第一届开始,每年的 re:Invent 大会都放在拉斯维加斯,主会场也都放在威尼斯人酒店 (Venetian)。有小伙伴好奇这背…

【实用干货】日本上市药品价格、说明书、在研新药在线查询网站及数据库

众所周知,日本对上市药品公开信息程度非常高,我们在了解药品信息时常常会访问日本药监局(日本药方局)官网的PMDA数据库来查询信息,但由于网站的不熟悉或语言障碍原因,导致查找某个药品信息需要花费大量时间,如药物综述…

【vba源码】自动获取汇率

Hi,大家好! 没有想到今天居然是腊八,过了腊八就是年,离过年越来越近了,那在这里给大家就拜个年,希望大家在新的一年都有好事发生。 最近在弄点小项目,在项目遇到了一个汇率计算的问题&#xff…

【学习路线】Python 算法(人工智能)详细知识点学习路径(附学习资源)

学习本路线内容之前,请先学习Python的基础知识 其他路线: Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析(数据科学) >> Python 算法(人工智能) >> Pyth…

CV-LLM经典论文解读|VTimeLLM: Empower LLM to Grasp Video MomentsVTimeLLM:赋能大语言模型理解视频片段

论文标题 VTimeLLM: Empower LLM to Grasp Video Moments VTimeLLM:赋能大语言模型理解视频片段 论文链接: VTimeLLM: Empower LLM to Grasp Video Moments论文下载 论文作者 Bin Huang, Xin Wang, Hong Chen, Zihan Song, Wenwu Zhu (Tsinghua Un…

机器学习基础-大语言模型

目录 大语言模型的基本概念 “大”体现在什么地方? 预训练微调两阶段的基本流程和作用 第一阶段:利用语言模型进行无监督预训练 第二阶段:通过监督微调的模式解决下游任务 BERT模型中MLM和NSP机制基本概念 MLM NSP Prompt学习的基本概…

给Kkfileview加请求头鉴权接入

所有接入前端token放localStorage, 或者后端cookie中获取鉴权 本案例以放localStorage为例 一、创建global.js $(document).ready(function() {// 设置全局的 AJAX 请求头$.ajaxSetup({headers: {Authentication: localStorage.getItem(Authentication) }}); }); 二。全部模…

flutter 专题二十四 Flutter性能优化在携程酒店的实践

Flutter性能优化在携程酒店的实践 一 、前言 携程酒店业务使用Flutter技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了Flutter技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和…

源代码编译安装X11及相关库、vim,配置vim(2)

一、编译安装vim 编译时的cofigure选项如下.只有上一步的X11的包安装全了(具体哪些是必须的,哪些是多余的没验证),configure才能认为X的库文件和头文件是可以用的。打开多个编程语言的支持特性。 ./configure --prefixpwd/mybui…

爬虫学习记录

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

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

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

主机A与主机B建立TCP连接的三次握手过程

( 1 )主机 A 的 TCP 向主机 B 发出连接请求 SYN 报文段(第一次握手)。( 1 分) ( 2 )一旦包含 SYN 报文段的 IP 数据报到达主机 B , SYN 报文段被从数据报…

SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令

对于开发人员和运维工程师而言,掌握 Docker 的基本概念和常用命令是必不可少的。本篇文章将带你快速入门 Docker,并介绍一些最常用的命令,帮助你更高效地进行开发、测试和部署。 目录 前言 快速入门 docker安装 配置镜像加速 部署Mysql …

Express 加 sqlite3 写一个简单博客

例图: 搭建 命令: 前提已装好node.js 开始创建项目结构 npm init -y package.json:{"name": "ex01","version": "1.0.0","main": "index.js","scripts": {"test": &q…

C++:字符数组

一、字符数组介绍 数组的元素如果是字符类型,这种数组就是字符数组,字符数组可以是一维数组,可以是二维数组 (多维数组)。我们接下来主要讨论的是一维的字符数组。 char arr1[5]; //⼀维字符数组 char arr2[3][5];//⼆…

基于SpringBoot实现的保障性住房管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

分享3个国内使用正版GPT的网站【亲测有效!2025最新】

1. molica 传送入口:https://ai-to.cn/url/?umolica 2. 多帮AI 传送入口:https://aigc.openaicloud.cn?inVitecodeMYAAGGKXVK 3. 厉害猫 传送入口:https://ai-to.cn/url/?ulihaimao