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.rhkb.cn/news/169343.html

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

相关文章

2023 年 42 周 - 学习 倦怠期回顾

2023 年 42 周 - 学习 & 倦怠期回顾 本周属于反思怪的时间,1/4 的内容涉及到反思自己,剩下超过 2/3 的内容是对于学习方法加强的笔记 顺便重新复习了一下上周的笔记,然后发现,其实周算错了……截图的日历直接用周日算成一周…

如何给Github上的开源项目提交PR?

前言 对于一个热爱开源的程序员而言,学会给GitHub上的开源项目提交PR这是迈出开源的第一步。今天我们就来说说如何向GitHub的开源项目提交PR,当然你提交的PR可以是一个项目的需求迭代、也可以是一个Bug修复、再或者是一些内容文本翻译等等,并…

element-plus 表格-自定义样式实现2

<template><h2>表格修改样式利用属性修改</h2><h3>row-style 行样式</h3><h3>row-style header-row-style 不能改背景色</h3><h3>cell-style header-cell-style能改背景色</h3><el-tableref"tableRef":dat…

S-Clustr(影子集群)新增Nets3e插件,实现一对多主机拍照

公告 项目地址:https://github.com/MartinxMax/S-Clustr 项目地址:https://github.com/MartinxMax/Nets3e 环境 这里有一台Windows主机,我们拿到了Webshell 依赖安装 根据你的主机类型选择依赖安装程序。 配置Nets3e 安装完成后,我们需要启动Nets3e服务端&#xff08;这边…

SpringCloud学习笔记(上):服务注册与发现:Eureka、Zookeeper、Consul+负载均衡服务调用:Ribbon

壹、零基础 一、微服务架构零基础理论入门 SpringCloud分布式微服务架构的一站式解决方案&#xff0c;是多种微服务架构落地技术的集合体&#xff0c;俗称微服务全家桶。 二、从2.2.x和H版开始说起 springboot版本选择&#xff1a; git源码地址&#xff1a;https://github.…

如何通过PAM禁止部分用户登录

如何通过 PAM 限制对 SSH 服务的根访问 如题。客户提出这样一个需求&#xff1a;限制和允许部分账号的SSH登录&#xff0c;限制名单可调。乍一看&#xff0c;这需求完全不合理啊&#xff1f;这又要改多少代码&#xff1f;但——PAM从脑海中一闪而过&#xff0c;想到一个办法&a…

轻松管理Web服务器:Linux Apache技巧与技术

1 Apache的基本介绍 1.1 Apache的作用 curl -I www.qq.com # 可以查看使用的服务器类型以上服务器都是提供超文本传输协议的软件。常用的服务器类型&#xff1a;Apache、nginx、stgw、Tengine 1.2 Apache的安装 dnf install httpd.x86_64 -y1.3 Apache的启用 systemctl en…

云计算要学习哪些技术?

学习云计算需要涉及多个技术领域和相关的工具、平台和框架。以下是一个详细的介绍&#xff0c;帮助您了解学习云计算所需的技术。 1. 虚拟化技术 虚拟化是云计算的基础&#xff0c;因此了解虚拟化技术至关重要。学习虚拟化技术时&#xff0c;需要掌握以下知识点&#xff1a; …

Ajax 笔记/练习

Ajax 异步JavaScript和XML 作用 实现 HTML 在不整体刷新的情况下&#xff0c;通过后台服务器&#xff0c;请求数据并局部更新页面内容 操作流程 Ajax 使用 XMLHttpRequest 通过new 关键字可以创建XMLHttpRequest() 对象。 var req new XMLHttpRequest();方法和属性说明req.…

CI2454 2.4g无线MCU芯片应用

Ci2454集成MCU芯片 | Ci2454是一款集成无线收发器和 8 位 RISC&#xff08;精简指令集&#xff09;MCU 的SOC芯片。 #Ci2454芯片 集成MCU芯片# 中国芯片# 无线收发器特性&#xff1a; 工作在 2.4GHz ISM 频段 调制方式&#xff1a;GFSK/FSK 数据速率&#xff1a;2Mbps/1Mbps…

虚拟世界游戏定制开发:创造独一无二的虚拟体验

在游戏开发领域&#xff0c;虚拟世界游戏定制开发是一项引人注目的任务&#xff0c;旨在满足客户独特的需求和愿景&#xff0c;创造一个完全个性化的虚拟世界游戏。这种类型的游戏开发需要专业的技能、深刻的游戏开发知识和密切的与客户合作&#xff0c;以确保游戏满足客户的期…

金蝶云星空企业版v8.0内网穿透配置详解:实现便捷的异地远程访问

文章目录 前言1. 金蝶云星空企业版v8.0安装下载1.1 登录金蝶官网下载安装包1.2 常见的安装下载问题 2. 金蝶云星空配置SQL Sever数据库2.1 创建数据管理中心2.2 创建完成后在服务器登录管理站点 3. 下载安装注册cpolar3.1 公网访问测试 4. 固定连接公网地址 前言 金蝶云星空专注…

统信UOS技术开放日:四大领域全面接入AI大模型能力

1024是程序员的节日&#xff0c;10月24日&#xff0c;统信举办2023统信UOS技术开放日暨deepin Meetup北京站活动&#xff0c;发布与大模型同行的UOS AI、浏览器AI助手、邮箱AI助手、自然语言全局搜索、畅写在线等多项最新AI技术与产品应用。 统信软件高级副总经理、CTO、深度社…

Bootstrap的列表组相关知识

目录 01-列表组的相关基础知识02-一个简单的列表组示例03-激活或禁用列表组的一行或多行04-设置列表项的颜色05-给列表项添加徽章 01-列表组的相关基础知识 Bootstrap的list-group是一个用于创建列表组件的CSS类&#xff0c;通常用于显示一个项目列表&#xff0c;如导航菜单或…

DataX 数据迁移

1、前期准备 Linux系统 Python&#xff08;最好是2&#xff09; Jdk 1.8以上 2、安装Python2 --更新软件包 sudo apt update --安装python2 sudo apt install python2 --查看python版本 python2 --version 3、下载DataX Linux下载DataX wget http://datax-opensource.o…

制药企业固体制剂设备管理及维护要点

在制药企业的生产过程中&#xff0c;固体制剂设备是至关重要的一环。有效管理和维护这些设备对于确保生产质量、提高生产效率以及延长设备寿命至关重要。本文将从以下三个方面介绍制药企业固体制剂设备的主要类型、常见管理问题以及设备维护的关键要点。 制药企业固体制剂设备主…

ChatGPT 助力英文论文翻译和润色

文章目录 一、前言二、主要内容1. 中英互译2. 中文润色3. 英文润色 三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着全球化的推进&#xff0c;跨文化交流变得越来越重要。在学术领域&#xff0c;英文论文的质量对于研究成果的传…

订水商城H5实战教程-03用户协议

目录 1 创建页面2 为文本组件增加事件3 检查用户协议是否勾选最终效果 我们上一篇介绍了打开首页时弹出登录窗口的功能&#xff0c;本篇我们实现一下用户协议。 1 创建页面 功能是点击用户协议的时候打开具体的协议内容&#xff0c;需要先创建一个页面。打开自定义应用&#x…

【FPGA】IIC协议通用主机接口的设计与实现详解

一、认识IIC IIC&#xff08;I2C&#xff09;协议是一种串行通信协议&#xff0c;用于连接微控制器和外围设备。IIC协议只需要两根信号线&#xff08;时钟线SCL和数据线SDA&#xff09;就能完成设备之间的通信&#xff1b;支持多主机和多从机通信&#xff0c;通过设备地址区分不…

C++栈、队列、优先级队列模拟+仿函数

目录 一、栈的模拟和deque容器 1.deque 1.1deque结构 1.2deque优缺点 2.stack模拟 二、队列的模拟 三、priority_queue优先级队列 1.优先级队列模拟 2.添加仿函数 一、栈的模拟和deque容器 在之前&#xff0c;我们学过了C语言版本的栈&#xff0c;可以看这篇文章 栈和…