Node学习笔记之fs模块

news2024/12/29 10:10:45

fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操
作。
本章节会介绍如下几个操作:

  1. 文件写入
  2. 文件读取
  3. 文件移动与重命名
  4. 文件删除
  5. 文件夹操作
  6. 查看资源状态

一、文件写入

文件写入就是将 数据 保存到 文件 中,我们可以使用如下几个方法来实现该效果

方法

说明

writeFile

异步写入

writeFileSync

同步写入

appendFile / appendFileSync

追加写入

createWriteStream

流式写入

1-1. writeFile 异步写入

语法:fs.writeFile(file, data[, options], callback)

参数说明:

file 文件名

data 待写入的数据

options 选项设置 (可选)

callback 写入回调

返回值:undefined

代码示例:

// require 是 Node.js 环境中的'全局'变量,用来导入模块

const fs = require('fs');

//将 『css』 写入到当前文件夹下的『study.txt』文件中

fs.writeFile('./study.txt', 'css', err => {
    //如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 null

    if (err) {
        console.log(err);
        return;
    }
    console.log('写入成功')

});

1-2. writeFileSync 同步写入

语法: fs.writeFileSync(file, data[, options])

参数与 fs.writeFile 大体一致,只是没有 callback 参数

返回值: undefined

代码示例:

const fs = require('fs');
try {
    fs.writeFileSync('./study.txt', 'vue');
} catch (e) {
    console.log(e);
}

1-3. appendFile / appendFileSync 追加写入

appendFile 作用是在文件尾部追加内容,appendFile 语法与 writeFile 语法完全相同 语法:

fs.appendFile(file, data[, options], callback)

fs.appendFileSync(file, data[, options])

返回值:二者都为undefined

实例代码:

const fs = require('fs');
fs.appendFile('./study.txt', 'react', err => {
    if (err) throw err;
    console.log('追加成功')
});

fs.appendFileSync('./study.txt', '\r\nnode');

1-4. createWriteStream 流式写入

语法:fs.createWriteStream(path[, options])

参数说明:

path 文件路径

options 选项配置( 可选 )

返回值: Object

码示例:

const fs = require('fs');
let ws = fs.createWriteStream('./music.txt');

ws.write('无关风月 我题序等你回\r\n');

ws.write('手中无愧 无惧人间是非\r\n');

ws.write('雨打蕉叶 又萧萧了几夜\r\n');

ws.write('我等春雷 来提醒你爱谁\r\n');

ws.end();

1-5 写入文件的场景

文件写入 在计算机中是一个非常常见的操作,下面的场景都用到了文件写入

  • 下载文件
  • 安装软件
  • 保存程序日志,如 Git
  • 编辑器保存文件
  • 视频录制

当 需要持久化保存数据 的时候,应该想到 文件写入

二、文件读取

文件读取顾名思义,就是通过程序从文件中取出其中的数据,我们可以使用如下几种方式:

方法

说明

readFile

异步读取

readFileSync

同步读取

createReadStream

流式读取

2-1 readFile 异步读取

语法: fs.readFile(path[, options], callback)

参数说明:

path 文件路径

options 选项配置

callback 回调函数

返回值:undefined

代码示例:

const fs = require('fs');
fs.readFile('./study.txt', (err, data) => {
    if (err) throw err;
    console.log(data, '111');
});
fs.readFile('./study.txt', 'utf-8', (err, data) => {
    if (err) throw err;
    console.log(data, '222');
});

2-2 readFileSync 同步读取

语法: fs.readFileSync(path[, options])

参数说明:

path 文件路径

options 选项配置

返回值:string | Buffer

代码示例:

const fs = require('fs');
let data = fs.readFileSync('./study.txt');

let data2 = fs.readFileSync('./study.txt', 'utf-8');
console.log(data)
console.log(data2)

2-3 createReadStream 流式读取

语法: fs.createReadStream(path[, options])

参数说明:

path 文件路径

options 选项配置( 可选 )

返回值:Object

代码示例:

const fs = require('fs');
//创建读取流对象

let rs = fs.createReadStream('./music.txt', 'utf-8');

//每次取出 64k 数据后执行一次 data 回调

rs.on('data', data => {
    console.log(data);
    console.log(data.length);
});

//读取完毕后, 执行 end 回调

rs.on('end', () => {
    console.log('读取完成')
})

2-4 读取文件应用场景

  • 电脑开机
  • 程序运行
  • 编辑器打开文件
  • 查看图片
  • 播放视频
  • 播放音乐
  • Git 查看日志
  • 上传文件
  • 查看聊天记录

三、文件移动与重命名

在 Node.js 中,我们可以使用rename或renameSync来移动或重命名 文件或文件夹

语法:

fs.rename(oldPath, newPath, callback)

fs.renameSync(oldPath, newPath)

参数说明:

oldPath 文件当前的路径

newPath 文件新的路径

callback 操作后的回调

代码示例:

const fs = require('fs');
fs.rename('./music.txt', './jay/music.txt', (err) => {
    if (err) throw err;
    console.log('移动完成')
});

fs.renameSync('./study.txt', './jay/study.txt');

四、文件删除

在 Node.js 中,我们可以使用unlink或unlinkSync来删除文件

语法:

fs.unlink(path, callback)

fs.unlinkSync(path)

参数说明:

path 文件路径

callback 操作后的回调

代码示例:

const fs = require('fs');

fs.unlink('./test.txt', err => {
    if (err) throw err;
    console.log('删除成功');
});

fs.unlinkSync('./test2.txt');

五、文件夹操作

借助 Node.js 的能力,我们可以对文件夹进行 创建、 读取 、删除 等操作

方法

说明

mkdir / mkdirSync

创建文件夹

readdir / readdirSync

读取文件夹

rmdir / rmdirSync

删除文件夹

5-1 mkdir 创建文件夹

在 Node.js 中,我们可以使用mkdir或mkdirSync来创建文件夹 语法:

fs.mkdir(path[, options], callback)

fs.mkdirSync(path[, options])

参数说明:

path 文件夹路径

options 选项配置( 可选 )

callback 操作后的回调

示例代码:

const fs = require('fs');
fs.mkdir('./page', err => {
    if (err) throw err;
    console.log('创建成功');
});

//递归异步创建

fs.mkdir('./1/2/3', { recursive: true }, err => {
    if (err) throw err;
    console.log('递归创建成功');
});

//递归同步创建文件夹

fs.mkdirSync('./x/y/z', { recursive: true });

5-2 readdir 读取文件夹

在 Node.js 中,我们可以使用readdir或readdirSync来读取文件夹 语法:

fs.readdir(path[, options], callback)

fs.readdirSync(path[, options])

参数说明:

path 文件夹路径

options 选项配置( 可选 )

callback 操作后的回调

示例代码:

const fs = require('fs');
//异步读取

fs.readdir('./jay', (err, data) => {
    if (err) throw err;
    console.log(data, '异步');
});

//同步读取

let data = fs.readdirSync('./jay');

console.log(data, '同步');

5-3 rmdir 删除文件夹

在 Node.js 中,我们可以使用rmdir或rmdirSync来删除文件夹 语法:

fs.rmdir(path[, options], callback)

fs.rmdirSync(path[, options])

参数说明:

path 文件夹路径

options 选项配置( 可选 )

callback 操作后的回调

示例代码:

const fs = require('fs');
//异步删除文件夹

fs.rmdir('./page', err => {
    if (err) throw err;
    console.log('删除成功');
});

//异步递归删除文件夹

fs.rmdir('./1', { recursive: true }, err => {
    if (err) {
        console.log(err);
    }
    console.log('递归删除')
});

//同步递归删除文件夹

fs.rmdirSync('./x', { recursive: true })

六、查看资源状态

在 Node.js 中,我们可以使用stat或statSync来查看资源的详细信息 语法:

fs.stat(path[, options], callback) fs.statSync(path[, options])

参数说明:

path 文件夹路径

options 选项配置( 可选 )

callback 操作后的回调

示例代码:

const fs = require('fs');
//异步获取状态

fs.stat('./data.txt', (err, data) => {
    if (err) throw err;
    console.log(data, '异步');
});

//同步获取状态

let data = fs.statSync('./data.txt');
console.log(data, '同步');

结果值对象结构:

size 文件体积

birthtime 创建时间

mtime 最后修改时间

isFile 检测是否为文件

isDirectory 检测是否为文件夹

....

七、相对路径问题

fs 模块对资源进行操作时,路径的写法有两种: 相对路径

./music.txt当前目录下的music.txt

music.txt等效于上面的写法

../music.txt当前目录的上一级目录中的座右铭.txt

绝对路径

D:/Program Files windows 系统下的绝对路径

/usr/bin Linux 系统下的绝对路径

相对路径中所谓的 当前目录 ,指的是 命令行的工作目录 ,而并非是文件的所在目录 所以当命令行的工作目录与文件所在目录不一致时,会出现一些 BUG

八、__dirname

__dirname与require类似,都是 Node.js 环境中的'全局'变量

__dirname保存着 当前文件所在目录的绝对路径 ,可以使用 __dirname 与文件名拼接成绝对路径

代码示例:

const fs = require('fs')
let data = fs.readFileSync(__dirname + '/data.txt', 'utf-8');

console.log(data);

使用 fs 模块的时候,尽量使用 __dirname 将路径转化为绝对路径,这样可以避免相对路径产生的 Bug

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

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

相关文章

Vercel,建站者的福音!!!

前言 各位互联网精神股东大家好! 在今年八九月份之前,我所搭建的杂七杂八的个人、团队应用,包括但不限于文档站,博客站,Api服务,线上项目等,他们背后的服务支持可以归纳为以下几种&#xff1a…

Arduion 驱动 ADXL335三轴加速度计模块

Arduion 驱动 ADXL335三轴加速度计模块 简介电气参数原理图接线代码实验结果 简介 ADXL335是一个小,薄,低功率,完整的三轴加速度计,具有信号调节电压输出。该产品测量加速度的最小全尺度范围为3 g。它可以测量倾斜传感应用中重力…

【微信小程序开发】之微信授权登陆

目录 前言 ​编辑一、微信授权登陆介绍 1. 基本概念 2. 微信小程序开发实现微信授权登陆原理流程 3. 小程序中运用微信授权登陆的好处 二、微信授权登陆接口演示 1. 在微信开发工具中导入小程序授权微信登陆前端项目 2. 微信授权登陆的方式 2.1 wx.login 2.2 wx.getUse…

提高查询性能的秘密:深入剖析聚集、辅助、覆盖和联合索引

文章目录 🍊 聚集索引🍊 辅助索引🍊 覆盖索引🎉 覆盖索引是什么?🎉 什么情况下优化器会选择使用覆盖索引?📝 1. 查询操作只需要用到辅助索引中的字段📝 2. 进行统计操作时…

使用Java实现汉诺塔问题~

我们设A为起始柱子,B为辅助柱子,C为目标柱子 由于盘子只能是大的放在下面,小的放在上面,因此,我们需要先将A柱子除了最下层的盘子都移动至B柱子 如下所示完成了最下层柱子到达它的最终位置,接下来&#xf…

Git(一)Windows下安装及使用Git Bash

目录 一、简介1.1 什么是Git?1.2 Git 的主要特点1.3 什么是 Git Bash? 二、下载三、安装3.1 同意协议3.2 选择安装位置3.3 其他配置(【Next】 即可)3.4 安装完毕3.5 打开 Git Bash 官网地址: https://www.git-scm.com/…

【React Router】React Router学习笔记

React Router学习笔记 React Router1.什么是React Router?2.为什么要用React Router?3.基础3.1 路由配置3.2 路由匹配原理3.3 History3.3.1 browerHistory3.3.2 hashHistory3.3.3 createMemoryHistory3.3.4 实现示例 3.4 默认路由(IndexRoute)与IndexLink3.4.1 IndexRoute3.4…

javaEE -6(10000详解文件操作)

一:认识文件 我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念&#xff0c…

畅行全球,美格智能SLM750模组锻造出海核心优势

什么是产品认证制度? 国际标准化组织(ISO)将产品认证定义为:由第三方通过检验评定企业的质量管理体系和样品型式试验来确认企业的产品、过程或服务是否符合特定要求,是否具备持续稳定地生产符合标准要求产品的能力&am…

蓝桥每日一题(day 5: 蓝桥593.既约分数)--数学--easy(注:排掉一个重复的情况)

考察gcd模板求解最大公约数。由于我是2去做的&#xff0c;实际上当ij1的时候&#xff0c;能构成的分数只能是一种情况&#xff0c;所以最后的res需要减去1&#xff01;&#xff01;&#xff01; #include <iostream> using namespace std;int gcd(int a, int b){return …

【Bayes-LSTM预测】基于贝叶斯优化算法优化长短期记忆网络的数据分类预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

建材物料经营小程序商城的作用是什么

对商家而言&#xff0c;入驻到第三方平台&#xff0c;除了受平台各种限制外&#xff0c;还有佣金/抽成等&#xff0c;也不利于打造私域流量池及会员管理、营销、转化、复购裂变留存等&#xff0c;只能依赖平台活动进行经营。 如今线下流量匮乏及难获取&#xff0c;发传单口口相…

【算法设计】递归与分治算法设计——二分搜索、假币识别问题(C++实现)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…

一个对接第三方会员充值平台的小程序方案

偶尔看到淘宝网上腾讯会员充值等服务卖的很火,所以在找有没有第三方平台的充值接口可以用呢,还真找到了,做简单的对接,前端VUE,后端springBoot抓取会员商品列表。 由于个人未开通支付渠道,不能进一步对接支付,分享出来,有兴趣的同学可以继续对接支付商用。 后端代码,主…

【JAVA学习一:基础语法】

记录学习过程和代码编写&#xff0c;小白纯属记录。 目录 一、运算符 二、数组 三、面向对象 一、运算符 赋值运算符 public class Demo01 { public static void main(String[] args){ System.out.println(11); System.out.println(1-1); System.out.printl…

Java8 BiConsumer<T, U> 函数接口浅析分享(含示例,来戳!)

文章目录 Java8 BiConsumer<T, U> 函数接口浅析分享&#xff08;含示例&#xff0c;来戳&#xff01;&#xff09;源码accept 方法示例示例一示例二 andThen 方法示例示例一示例二 示例相关代码类dohandler 方法student.javaStudentScore.javaStudentScoreDto.java Java8…

Redbook Chapter 7: Query Optimization翻译批注

首先说明一下redbook上的几篇文章是做什么的。这几篇文章是通过几位作者对不同方面的论文进行阅读和筛选后&#xff0c;挑出其中具备代表性或者权威的论文来做分析&#xff0c;为读者提供阅读指导和建议&#xff0c;同时&#xff0c;也是对某个方面的论文进行高度的总结&#x…

决策树完成图片分类任务

数据集要求&#xff1a; 训练集 和 验证集 &#xff08;要求分好&#xff09; 图片放置规则 &#xff1a; 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片 举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。 其中猫的文件夹里面…

关于设置图标

1. exe图标 visual studio给编译的exe程序添加程序图标的方法_vs编译的exe图标-CSDN博客 2.窗口图标和任务栏图标 setWindowIcon 3.任务管理器的图标 外部是exe的图标&#xff0c;内部是窗口图标。

更改idea的JDK版本

有时候我们需要更改 idea 的 JDK 版本&#xff0c;这里告诉大家更改的方法&#xff0c;非常简单快捷&#xff0c;而且也不需要去找 JDK 的资源 1.在 idea 的左上角找到 File 选择 Peoject Structure 2.在页面左上角找到 Project &#xff0c;点击 SDK 的框&#xff0c;选择 A…