Node学习笔记之fs模块

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 => {//如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 nullif (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.mzph.cn/news/115774.shtml

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

相关文章

CAPL如何实现27服务解锁

在文章《CANoe-如何实现27服务解锁》里,我们介绍了诊断控制台中如何实现27解锁,如果我想在CANoe中使用CAPL程序解锁的话,又要如何实现呢? CAPL脚本也是通过模拟手动操作来实现27解锁,所以步骤为: 发送10 03发送27 01接收67 01,获取seed值根据seed值和算法,计算出key值…

http post协议实现简单的rpc协议,WireShark抓包分析

文章目录 1.http 客户端-RPC客户端1.http 服务端-RPC服务端3.WireShark抓包分析3.1客户端到服务端的HTTP/JSON报文3.2服务端到客户端的HTTP/JSON报文 1.http 客户端-RPC客户端 import json import requests# 定义 RPC 客户端类 class RPCClient:def __init__(self, server_url…

ZYNQ linux调试LCD7789

一,硬件管脚 1,参数解释和实物 LVGL是一个开源的图形库,主要用于MCU上屏幕UI的部署,功能完善,封装合理,可裁切性强,也可以实现Linux上fbx的部署。LVGL官网LVGL - Light and Versatile Embedded Graphics Library 每根线的作用

接口测试 Jmeter 接口测试 —— 请求 Headers 与传参方式

一、 背景: 在使用 Jmeter 进行接口测试时,有些小伙伴不知道 Headers 和请求参数 (Parameters,Body Data) 的联系,本文主要讲 Content-Type 为 application/x-www-form-urlencoded 和 application/json 的场景。 1、使用 Parame…

[SWPUCTF 2023 秋季新生赛] web题解

文章目录 colorful_snakeNSS_HTTP_CHEKER一键连接!ez_talkPingpingpingUnS3rialize查查needIf_elseRCE-PLUSbackup colorful_snake 打开题目,查看js源码 直接搜flag 把那三行代码复制到控制器,得到flag NSS_HTTP_CHEKER 都是http请求基本知识 抓包按照…

如何保养维护实验室超声波清洗机

实验室是用于各个行业产品的研发以及检验的场所,所以对其中所使用的各种物品都有着极高的要求,因此只有品类齐全的实验室超声波清洗机能够满足实验室对于清洁以及其他方面的一些需求,但是要想实验室超声波清洗机设备的性能能够始终如一&#…

驱动开发day4

通过字符设备驱动的分步实现编写LED驱动,另外实现设备文件和驱动的绑定 head.h #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }…

RHCE---Shell基础 2

文章目录 目录 文章目录 前言 一.变量 概述 定义 自定义变量 环境变量 概述: 定义环境变量: 位置变量 "$*"会把所有位置参数当成一个整体(或者说当成一个单词 变量的赋值和作用域 read 命令 变量和引号 变量的作用域 变…

【茫茫架构路】1. Class File字节码文件解析

本文所有内容的JDK版本为 OpenJDK 11 JDK11 Class File官方说明。 Java解析字节码文件源码参考,以下为部分字节码解析源码展示。 public ClassFile(DataInputStream in) {try {//magic: 0xCAFEBABEthis.magic ClassReader.readInt(in);System.out.println("m…

高等数学啃书汇总重难点(五)定积分

最近都在忙着刷题,尤其是政治和英语也开始加量复习了,该系列断更了将近2个月~不过最近在刷题的时候又遇到一些瓶颈,因此回归基础来整理一下知史点~ 总的来说,虽然第五章也是重中之重,定理数量也很多,但&…

C语言每日一题(17)老人的数目

力扣 2678 老人的数目 给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息,信息用长度为 15 的字符串表示,表示方式如下: 前十个字符是乘客的手机号码。接下来的一个字符是乘客的性别。接下来两个字符是乘客的…

JMeter添加插件

一、前言 ​ 在我们的工作中,我们可以利用一些插件来帮助我们更好的进行性能测试。今天我们来介绍下Jmeter怎么添加插件? 二、插件管理器 ​ 首先我们需要下载插件管理器jar包 下载地址:Install :: JMeter-Plugins.org 然后我们将下载下来…

MYSQL(事务+锁+MVCC+SQL执行流程)理解

一)事务的特性: 一致性:主要是在数据层面来说,不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说,要么操作完成,要么操作全部回滚; 隔离性:是自己的事务操作自己的数据,不会受到到其…

Centos 7 Zabbix配置安装

前言 Zabbix是一款开源的网络监控和管理软件,具有高度的可扩展性和灵活性。它可以监控各种网络设备、服务器、虚拟机以及应用程序等,收集并分析性能指标,并发送警报和报告。Zabbix具有以下特点: 1. 支持多种监控方式:可…

向量检索库Milvus架构及数据处理流程

文章目录 背景milvus想做的事milvus之前——向量检索的一些基础近似算法欧式距离余弦距离 常见向量索引1) FLAT2) Hash based3) Tree based4) 基于聚类的倒排5) NSW(Navigable Small World)图 向…

mysql—面试50题—1

注:面试50题将分为5个部分,每部分10题 一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student …

微信小程序之会议OA首页数据交互,会议状态,会议人数转换,会议室交互,WXS的使用

前言: 本篇博客使用结合了SpringMVC,mybatis,maven,小程序,如果不熟悉使用可以翻看我之前的博客,以便大家可以更好的学习!!! 一,会议OA首页数据的后台交互 这…

【SwiftUI模块】0060、SwiftUI基于Firebase搭建一个类似InstagramApp 2/7部分-搭建TabBar

SwiftUI模块系列 - 已更新60篇 SwiftUI项目 - 已更新5个项目 往期Demo源码下载 技术:SwiftUI、SwiftUI4.0、Instagram、Firebase 运行环境: SwiftUI4.0 Xcode14 MacOS12.6 iPhone Simulator iPhone 14 Pro Max SwiftUI基于Firebase搭建一个类似InstagramApp 2/7部分-搭建Tab…

机器学习笔记 - 特斯拉的占用网络简述

一、简述 ​ 2022 年,特斯拉宣布即将在其车辆中发布全新算法。该算法被称为occupancy networks,它应该是对Tesla 的HydraNet 的改进。 自动驾驶汽车行业在技术上分为两类:基于视觉的系统和基于激光雷达的系统。后者使用激光传感器来确定物体的存在和距离,而视觉系统…

算法通关村第十一关青铜挑战——移位运算详解

大家好,我是怒码少年小码。 计算机到底是怎么处理数字的? 数字在计算机中的表示 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数。 机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0&am…