node.js基础学习-fs模块-文件操作(六)
一、前言
fs模块是 Node.js 内置的文件系统(File System)模块,它提供了一系列用于与文件系统进行交互的方法。通过fs模块,可以对文件或目录进行读取、写入、删除、重命名、查询状态等操作,这使得 Node.js 能够很好地处理本地文件相关的任务。
二、常用方法
1. 读取文件
fs.readFile():这是一种异步读取文件内容的方法。它接受文件路径、编码方式(可选)和回调函数作为参数。例如:
const fs = require('fs');
const file_path = 'example.txt';
fs.readFile(file_path, 'utf8', (err, data) => {if (err) {console.error('读取文件出错:', err);} else {console.log('文件内容:', data);}
});
在这个例子中,fs.readFile()尝试以utf8编码读取example.txt文件。如果读取过程中出现错误,err参数会包含错误信息,在回调函数中可以进行错误处理;如果读取成功,文件内容会存储在data参数中并打印出来。
fs.readFileSync():这是fs.readFile()的同步版本。它会阻塞 Node.js 进程,直到文件读取完成。例如:
const fs = require('fs');
const file_path = 'example.txt';
try {const data = fs.readFileSync(file_path, 'utf8');console.log('文件内容:', data);
} catch (err) {console.error('读取文件出错:', err);
}
这里使用try - catch块来捕获可能出现的错误。由于是同步操作,代码的执行顺序比较直观,在读取大文件时可能会导致程序暂时无响应,因为它会等待文件读取完成。
2. 写入文件
fs.writeFile():用于异步地将数据写入文件。如果文件不存在,会创建一个新文件;如果文件已存在,则会覆盖原有内容。例如:
const fs = require('fs');
const file_path = 'new_example.txt';
const data = '这是要写入文件的内容';
fs.writeFile(file_path, data, 'utf8', (err) => {if (err) {console.error('写入文件出错:', err);} else {console.log('文件已成功写入');}
});
这个例子中,将字符串data以utf8编码写入到new_example.txt文件中。同样,通过回调函数处理写入过程中的错误或成功情况。(内容会被覆盖)
fs.writeFileSync():这是fs.writeFile()的同步版本,会阻塞进程直到写入操作完成。例如:
const fs = require('fs');
const file_path = 'new_example.txt';
const data = '这是要写入文件的内容';
try {fs.writeFileSync(file_path, data, 'utf8');console.log('文件已成功写入');
} catch (err) {console.error('写入文件出错:', err);
}
3. 追加文件内容
fs.appendFile():异步地将数据追加到文件末尾(这个解决了**fs.writeFile()**会覆盖前面内容的特点)。例如:
const fs = require('fs');
const file_path = 'append_example.txt';
const data = '这是要追加的内容';
fs.appendFile(file_path, data, 'utf8', (err) => {if (err) {console.error('追加文件内容出错:', err);} else {console.log('内容已成功追加到文件');}
});
- 与
fs.writeFile()不同的是,fs.appendFile()不会覆盖原有文件内容,而是在文件末尾添加新内容。 **fs.appendFileSync()**:这是fs.appendFile()的同步版本,会阻塞进程进行追加操作。
4. 读取目录内容
fs.readdir():异步地读取目录中的文件和子目录列表。例如:
const fs = require('fs');
const dir_path = 'example_directory';
fs.readdir(dir_path, (err, files) => {if (err) {console.error('读取目录出错:', err);} else {console.log('目录中的文件和子目录:', files);}
});
- 这个方法返回目录中的文件名和子目录名的数组。如果需要进一步了解每个文件或子目录的详细信息,可以结合其他方法,如
fs.stat()来获取文件或目录的状态信息。 fs.readdirSync():这是fs.readdir()的同步版本,会返回目录中的文件和子目录名的数组。
5. 检查文件或目录是否存在
fs.existsSync():这是一个同步方法,用于检查指定的文件或目录是否存在。例如:
const fs = require('fs');
const file_path = 'example.txt';
if (fs.existsSync(file_path)) {console.log('文件存在');
} else {console.log('文件不存在');
}
需要注意的是,在 Node.js 官方文档中,fs.exists()(异步版本)已被废弃,推荐使用fs.existsSync()(同步版本)或者其他替代方法,如fs.stat()或fs.access()来检查文件或目录的存在性。
6. 获取文件或目录的状态信息
fs.stat():异步地获取文件或目录的状态信息,包括文件大小、创建时间、修改时间、权限等。例如:
const fs = require('fs');const fileOrDirectoryPath = 'example.txt';fs.stat(fileOrDirectoryPath, (err, stats) => {if (err) {console.error('获取文件或目录状态出错:', err);} else {// 检查是文件还是目录if (stats.isFile()) {console.log('这是一个文件。');console.log('文件大小为:', stats.size, '字节');console.log('文件的创建时间为:', stats.birthtime);console.log('文件的最后访问时间为:', stats.atime);console.log('文件的最后修改时间为:', stats.mtime);} else if (stats.isDirectory()) {console.log('这是一个目录。');console.log('目录中的文件数量(大致):', stats.nlink);}}
});
这里的stats对象包含了许多关于文件或目录状态的属性,可以根据需要获取相应的信息。fs.statSync()是其同步版本。
7. 文件流(Stream)相关操作(高级用法)
fs.createReadStream()和fs.createWriteStream():这两个方法用于创建文件读取流和文件写入流,通过流的方式处理文件可以更高效地处理大型文件,避免一次性将整个文件内容加载到内存中。例如,复制一个文件:
const fs = require('fs');
const read_stream = fs.createReadStream('source_file.txt');
const write_stream = fs.createWriteStream('destination_file.txt');
read_stream.on('data', (chunk) => {write_stream.write(chunk);
});
read_stream.on('end', () => {write_stream.end();console.log('文件复制完成');
});
在这个例子中,fs.createReadStream('source_file.txt')创建了一个读取source_file.txt文件的读取流,fs.createWriteStream('destination_file.txt')创建了一个写入destination_file.txt的写入流。当读取流有数据(read_stream.on('data',...))时,将数据块chunk写入到写入流中。当读取流结束(read_stream.on('end',...))时,结束写入流操作,表示文件复制完成。这种方式在处理大型文件时,能够有效地利用内存,提高文件处理的效率。
前面我们写的那个简单的爬虫例子也是用到了fs.createWriteStream(),将爬虫爬到的图片下载到相应的目录下。
相关文章:
node.js基础学习-fs模块-文件操作(六)
一、前言 fs模块是 Node.js 内置的文件系统(File System)模块,它提供了一系列用于与文件系统进行交互的方法。通过fs模块,可以对文件或目录进行读取、写入、删除、重命名、查询状态等操作,这使得 Node.js 能够很好地处…...
设计模式:11、迭代器模式(游标)
目录 0、定义 1、迭代器模式的四种角色 2、迭代器模式的UML类图 3、示例代码 4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例) 0、定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象…...
Oracle SCN与时间戳的映射关系
目录 一、基本概述 二、相关操作 三、参考文档 一、基本概述 Oracle 数据库中的 SYS.SMON_SCN_TIME 表是一个关键的内部表,主要用于记录过去时间段中SCN与具体的时间戳之间的映射关系。这种映射关系可以帮助用户将 SCN 值转换为可读性更强的时间戳,从而…...
【广告投放系统】头条可视化投放平台vue3+element-plus+vite落地历程和心得体会
前言 hallo,又是许久未见,昨天也是正式把公司内部的广告投放平台暂时落地,我也即将离开待了两年多的地方。言归正传,由于头条广告后台的升级改版,因此为了满足内部投放需求,做了一个可视化的投放平台&…...
Gazebo插件相机传感器(可订阅/camera/image_raw话题)
在仿真环境中使用相机传感器,通常需要结合Gazebo插件来实现。Gazebo是一个功能强大的机器人仿真工具,支持多种传感器模型,包括相机。下面是如何在Gazebo中使用相机传感器的详细步骤。 1. 修改Xacro文件以包含Gazebo插件 首先,修…...
华三(HCL)和华为(eNSP)模拟器共存安装手册
接上章叙述,解决同一台PC上同时部署华三(HCL)和华为(eNSP)模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本,可以直接和eNSP兼容Oracle VirtualBox,而其他版本均使用Oracle VirtualBox v6以上的版本,…...
信息学奥赛一本通 1448:【例题1】电路维修 | 洛谷 P4667 [BalticOI 2011 Day1] Switch the Lamp On 电路维修
【题目链接】 ybt 1448:【例题1】电路维修 洛谷 P4667 [BalticOI 2011 Day1] Switch the Lamp On 电路维修 【题目考点】 1. 双端队列广搜(0-1BFS) 【解题思路】 整个电路是由一个个的正方形的电路元件组成,每个正方形有四个…...
k8s删除网络组件错误
k8s集群删除calico网络组件重新部署flannel网络组件,再部署pod后出现报错不能分配ip地址 plugin type"calico" failed (add): error getting ClusterInformation: connection is unauthorized: Unauthorized 出现该问题是因为删除网络组件后,网…...
MySQL之JDBC
我们在学习完了数据库的基本操作后,希望和我们的Java程序建立连接,那么我们今天就来一探究竟JDBC是如何让Java程序与数据库建立连接的 1. 什么是JDBC JDBC(Java Data Base Connectivity, Java数据库连接) 是Java程序和数据库之间…...
音视频入门基础:MPEG2-TS专题(10)——PAT简介
一、引言 当某个transport packet的TS Header中的PID属性的值为0x0000时,该transport packet的payload为Program association table ,即 PAT表。PAT表包含所有PMT表的目录列表,将program_number和PMT表的PID相关联,获取数据的起始…...
ElementUI:el-drawer实现在父组件区域内打开抽屉组件非全屏
我们在开发ElementUI的时候遇到抽屉组件全屏的问题,但是我们需要在指定div中展示出来,上代码: 1、在el-drawer中增加属性 el-drawerstyle"position: absolute"z-index"-1":append-to-body"false">// do s…...
Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架
一、项目构建环境准备 在构建Vue项目之前,需要搭建Node环境以及Vue-CLI脚手架,由于本篇文章为上一篇文章的补充,也是为了给大家分享更为完整的搭建vue项目方式,所以环境准备部分采用Vue教程|搭建vue项目|V…...
jmeter学习(7)命令行控制
jmeter -n -t E:\IOT\test2.jmx -l E:\IOT\output\output.jtl -j E:\IOT\output\jmeter.log -e -o E:\IOT\output\report IOT下创建output 文件夹,jmx文件名避免中文,再次执行output.jtl不能有数据要删除...
BGP协议路由黑洞
一、实验环境 1、分公司与运营商AS自治系统内运行IGP路由协议OSPF、RIP或静态路由,AS自治系统内通过IBGP路由协议建立BGP邻居关系。 2、公司AS自治系统与运营商AS自治系统间运行EBGP路由协议。 3、通过loopback建立IBGP与EBGP邻居关系,发挥loopback建立…...
存储结构及关系(一)
学习目标 描述数据库的逻辑结构列出段类型及其用途列出控制块空间使用的关键字获取存储结构信息 段的类型 段是数据库中占用空间的对象。它们使用数据库数据文件中的空间。介绍不同类型的段。 表 表是在数据库中存储数据的最常用方法。表段用于存储既没有集群也没有分区的表…...
玄机应急:linux入侵排查webshell查杀日志分析
目录 第一章linux:入侵排查 1.web目录存在木马,请找到木马的密码提交 2.服务器疑似存在不死马,请找到不死马的密码提交 3.不死马是通过哪个文件生成的,请提交文件名 4.黑客留下了木马文件,请找出黑客的服务器ip提交 5.黑客留…...
python爬虫安装教程
Python爬虫是用于从网站上自动抓取信息的程序。在开始之前,请确保您了解并遵守目标网站的服务条款,尊重版权法,并且在合理合法的范围内使用爬虫技术。 安装环境 安装Python:首先确保您的计算机上已经安装了Python。推荐版本为3.…...
田忌赛马五局三胜问题matlab代码
问题描述:在可以随机选择出场顺序的情况下,如果把比赛规则从三局两胜制改为五局三胜制,齐王胜出的概率是上升了还是下降了?五局三胜的赛制下,大家的马重新分为5个等级。前提条件仍然是齐王每种等级的马都优于田忌同等级…...
Spring循环依赖问题的解决
项目启动提示如下异常: The dependencies of some of the beans in the application context form a cycle 这表明在我们的应用中存在了循环依赖,示例: Bean A 中注入了Bean B依赖,然后 Bean B 中注入了Bean A依赖。也就是说&…...
KAN-Transfomer——基于新型神经网络KAN的时间序列预测
1.数据集介绍 ETT(电变压器温度):由两个小时级数据集(ETTh)和两个 15 分钟级数据集(ETTm)组成。它们中的每一个都包含 2016 年 7 月至 2018 年 7 月的七种石油和电力变压器的负载特征。 traffic(交通) :描…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
