node fs模块读取文件 readFile、readFileSync、fsPromises.readFile、createReadStream

文章目录

    • 1.读取文件
      • 1.1 readFile
      • 1.2 readFileSync
      • 1.3 fsPromises.readFile:promise的写法
      • 1.4 fs.createReadStream

1.读取文件

  • readFile:异步读取文件
  • readFileSync:同步读取文件
  • fsPromises.readFile:promise的写法

需要注意的是,前三个方法,如果不指定 编码(options.encoding) 则数据作为 < Buffer > 返回,否则数据为字符串

1.1 readFile

函数参数

fs.readFile(path[, options], callback)
path:< string > | < Buffer > | < URL > | < integger > 文件名或文件描述符
options:< Object > | < string > edcoding:< string > | < null > 默认值 nullflag:< string >  可以填写的值,在下面,默认值是'r'signal:< AbortSignal > 允许中止正在进行的读取文件
  1. 'a': 打开文件进行追加。 如果文件不存在,则创建该文件。‘ax’: 类似于 ‘a’ 但如果路径存在则失败。
  2. 'a+': 打开文件进行读取和追加。 如果文件不存在,则创建该文件。
  3. 'ax+': 类似于 ‘a+’ 但如果路径存在则失败。
  4. 'as': 以同步模式打开文件进行追加。 如果文件不存在,则创建该文件。
  5. 'as+': 以同步模式打开文件进行读取和追加。 如果文件不存在,则创建该文件。
  6. 'r': 打开文件进行读取。 如果文件不存在,则会发生异常。
  7. 'r+': 打开文件进行读写。 如果文件不存在,则会发生异常。
  8. 'rs+': 以同步模式打开文件进行读写。 指示操作系统绕过本地文件系统缓存。(这主要用于在 NFS 挂载上打开文件,因为它允许跳过可能过时的本地缓存。 它对 I/O 性能有非常实际的影响,因此除非需要,否则不建议使用此标志。这不会将 fs.open() 或 fsPromises.open() 变成同步阻塞调用。 如果需要同步操作,应该使用类似 fs.openSync() 的东西。)
  9. 'w': 打开文件进行写入。 创建(如果它不存在)或截断(如果它存在)该文件。
  10. 'wx': 类似于 ‘w’ 但如果路径存在则失败。
  11. 'w+': 打开文件进行读写。 创建(如果它不存在)或截断(如果它存在)该文件。
  12. 'wx+': 类似于 ‘w+’ 但如果路径存在则失败。

在这里插入图片描述

const fs = require("fs");
// 1、readFile
fs.readFile("./歌词.txt", {}, (err, data) => {// 如果文件中是:早上好,这三个字,则会输出下面这一行console.log(data); // <Buffer e6 97 a9 e4 b8 8a e5 a5 bd> ;
});
console.log("下面代码");

如果在第二个参数中,加上 encoding: "utf-8" ,则会直接输出 原始内容

在这里插入图片描述

fs.readFile("./歌词.txt",{encoding: "utf-8",},(err, data) => {// 如果文件中是:早上好,这三个字,则会输出下面这一行console.log(data); // <Buffer e6 97 a9 e4 b8 8a e5 a5 bd> ;// 如果第二个参数,加上了  encoding: "utf-8", 则会直接输出对应的原始文字}
);

1.2 readFileSync

函数参数

fs.readFileSync(path[, options])
path:< string > | < Buffer > | < URL > | < integger > 文件名或文件描述符
options:< Object > | < string > edcoding:< string > | < null > 默认值 nullflag:< string >  可以填写的值,在下面,默认值是'r'
const file = fs.readFileSync("./歌词.txt");
console.log(file);// 输出内容:<Buffer e6 97 a9 e4 b8 8a e5 a5 bd>
const file = fs.readFileSync("./歌词.txt", { encoding: "utf-8" });
console.log(file); // 早上好
// 如果加上 utf-8 还是会直接输出原始内容

1.3 fsPromises.readFile:promise的写法

函数参数

fsPromises.readFile(path[, options])
path:< string > | < Buffer > | < URL > | < integger > 文件名或文件描述符
options:< Object > | < string > edcoding:< string > | < null > 默认值 nullflag:< string >  可以填写的值,在下面,默认值是'r'signal:< AbortSignal > 允许中止正在进行的读取文件

代码示例

fsPromises.readFile("./歌词.txt", { encoding: "utf-8" }).then((res) => {console.log("res", res);},(err) => {console.log("err", err);}
);

1.4 fs.createReadStream

函数参数
在这里插入图片描述
options 参数的意思

  1. flags: 用于指定文件打开的方式,默认为 “r”,表示以只读方式打开文件。其他常见的取值包括 “w”(写入)、“a”(追加)等
  2. encoding: 用于指定读取文件时的编码方式,默认为 null,表示以原始的 Buffer 形式进行读取。可以设置为诸如 “utf8”、“ascii”、“base64” 等字符串,以将读取的数据转换为相应的字符编码。
  3. fd: 文件描述符,可以用于指定已经打开的文件的文件描述符
  4. mode: 用于设置文件的权限,默认为 0o666
  5. autoClose: 用于指示在流结束时是否自动关闭底层的资源,默认为 true
  6. emitClose:用于指定在流关闭时是否触发 close 事件,默认值为 true
  7. start: 指定从文件中读取的起始位置的偏移量
  8. end: 指定从文件中读取的结束位置的偏移量
  9. highWaterMark: 用于设置缓冲区大小,表示每次从底层资源读取的最大字节数,默认 64* 1024

代码示例
在这里插入图片描述

可以设置 highWaterMark ,默认值是64*1024KB,默认单位是 字节 , 上面的代码就是 每次读取 400 字节
highWaterMark 是 Node.js 中可读流和可写流的一个选项,用于设置缓冲区大小。对于可读流来说,它表示每次从底层资源读取数据时的最大字节数,默认值为 64KB。如果正在读取的数据超过了 highWaterMark 的大小,则会暂停读取,直到当前缓冲区中的数据被消费完毕,以保证内存不会被过度占用

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

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

相关文章

为什么ChatGPT采用SSE协议而不是Websocket?

在探索ChatGPT的使用过程中&#xff0c;我们发现GPT采用了流式数据返回的方式。理论上&#xff0c;这种情况可以通过全双工通信协议实现持久化连接&#xff0c;或者依赖于基于EventStream的事件流。然而&#xff0c;ChatGPT选择了后者&#xff0c;也就是本文即将深入探讨的SSE&…

多账号统一登录,如何设计

多账号统一登录是一种常见的需求&#xff0c;特别是在大型应用或平台中。设计一个多账号统一登录系统需要考虑以下几个方面&#xff1a; 1. 用户标识&#xff1a;每个用户在系统中应有唯一的标识&#xff0c;可以是用户名、邮箱、手机号等。这些标识应该与账号信息关联&#x…

MC17XS6500 高边驱动芯片寄存器的介绍

本文主要是对 MC17XS6500 高边驱动芯片寄存器进行的介绍&#xff0c;MC17XS6500 寄存器分为输入寄存器和输出寄存器&#xff0c;对常用的几个输入和输出寄存器的功能和配置进行了介绍。本文中&#xff0c;世平集团基于 FlagChips FC7300 HV BMS 方案&#xff0c;对 MC17XS6500 …

Python 内置高阶函数练习(Leetcode500.键盘行)

Python 内置高阶函数练习&#xff08;Leetcode500.键盘行&#xff09; 【一】试题 &#xff08;1&#xff09;地址&#xff1a; 500. 键盘行 - 力扣&#xff08;LeetCode&#xff09; &#xff08;2&#xff09;题目 给你一个字符串数组 words &#xff0c;只返回可以使用在…

【算法】王晓东期末考题总结(一)

文章目录 分治动态规划贪心算法 分治 实现思路可参考&#xff1a;【算法】分治算法 之前写的Java版有思路。 二分搜索 #include <iostream> #include <vector>using namespace std;// 二分搜索函数 int binarySearch(const vector<int>& array, int t…

Flask笔记四之异常处理

本文首发于公众号&#xff1a;Hunter后端 原文链接&#xff1a;Flask笔记四之异常处理 在系统运行中&#xff0c;有时候需要处理报错异常。 异常的来源可能是系统在运行中的报错&#xff0c;比如错误的运算的有 1/0 这种等&#xff0c;还有的是访问了不存在接口&#xff0c;又…

docker 部署mysql

docker pull mysql:5.7.25 docker run \ --name mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -p 3306:3306 \ -v /soft/mysql/conf:/etc/mysql \ -v /soft/mysql/data:/var/lib/mysql \-d \mysql:5.7.25安装好之后可以用命令行进入查看 docker exec -it mysql mysql -u root -p密…

解决ROS含动态参数的Config文件无法正确识别的错误

问题描述 功能包名为paddle_detection 在工作空间下, 通过catkin_make可以正常通过编译且执行无异常, 可以通过bloom-generate rosdebian生成依赖 但是在将其打包成deb包的过程中fakeroot debian/rules binary报错 fatal error: paddle_detection/paddle_detectionConfig.…

116基于matlab的盲源信号分离

基于matlab的盲源信号分离。FASTICA方法&#xff0c;能够很好的将信号解混&#xff0c;可以替换数据进行分析。具有GUI界面&#xff0c;可以很好的进行操作。程序已调通&#xff0c;可直接运行。 116matlab盲源信号分离FASTICA (xiaohongshu.com)

IDEA搜索指定某个类的方法的引用位置

搜索方法引用位置的时候&#xff0c;如果该方法是接口定义出来的&#xff0c;则结果里会包含其他实现类的该方法的引用位置&#xff0c;但是像Object定义的Equals方法这种&#xff0c;搜索出来的结果是超级多的&#xff0c;根据没法看&#xff0c;因此想要只看该类的方法引用位…

python的WebSocket编程详解,案例群聊系统实现

1.websocket相关 1.1为什么要用websocket 如果有需求要实现服务端向客户端主动推送消息时&#xff08;比如聊天室&#xff0c;群聊室&#xff09;有哪几种方案 轮训&#xff1a;让浏览器每隔两秒发送一次请求&#xff0c;缺点&#xff1a;有延时&#xff0c;请求太多网站压力…

扭蛋机小程序搭建:打造互联网“流量池”

随着互联网科技的发展&#xff0c;扭蛋机小程序成为了市场发展的重要力量。 扭蛋机市从日本发展流行起来的&#xff0c;玩法就是根据设置的概率&#xff0c;让玩家体验扭蛋机的乐趣。扭蛋机中有隐藏款和稀有款&#xff0c;为了获得稀有款商品&#xff0c;玩家便会进行扭蛋&…

Zabbix图形显示乱码修复

2023年12月29日&#xff0c;星期五&#xff0c;2023年最后一个工作日了&#xff0c;明天就开始放假元旦了&#xff0c;去年水了31篇&#xff0c;今年到目前为止才水了30篇&#xff0c;所以这篇也水一下来充个数。祝大家元旦快乐&#xff0c;新的一年里越来越好。 被监控主机指…

Vue3-26-路由-useRouter 和 useRoute 两个API 的作用介绍

先来说说两个API 的作用 useRouter() : 返回的是项目中的 路由实例的对象 可以通过这个实例对象进行路由的逻辑跳转 useRoute() : 返回的是当前的 路由对象&#xff0c; 可以在当前路由对象中获取到路由名称、路由参数、路由路径等玩完整的路由信息。 写个案例看一下具体是什么…

二、类与对象(三)

17 初始化列表 17.1 初始化列表的引入 之前我们给成员进行初始化时&#xff0c;采用的是下面的这种方式&#xff1a; class Date { public:Date(int year, int month, int day)//构造函数{_year year;_month month;_day day;} private:int _year;int _month;int _day; };…

【数据结构和算法】独一无二的出现次数

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 哈希类算法题注意事项 2.2 方法一&#xff1a;判断长度 2.3 方法二&#xff1a; set 判断 2.4 方法…

《Linux系统与网络管理》---题库---简答题

1、简述这些分区的名字以及各自的作用。 答&#xff1a; /boot 存放内核镜像的地方&#xff0c;这个文件夹独立分区的意义在于降低不能开机的风险。 /根目录&#xff0c;一般采用 etx3 文件系统&#xff0c;分区的容量一定要大于安装软件包的容量。 /usr 多数软件的默认安装的地…

HTTP 是哪⼀层的协议?简述它的作⽤?

theme: channing-cyan http协议是应用层的协议&#xff0c;主要用于web浏览器和服务器两点之间传输超文本的协议&#xff0c;它是一种⽆状态的协议&#xff0c;即服务器不 会保存关于客户端的任何信息&#xff0c;每次客户端发送请求&#xff0c;服务器都会返回响应。HTTP 协议…

举个栗子~位操作到底有什么用【库仑计芯片MAX17043】

首先吐槽各个平台在卖的五花八门的库仑计芯片EV board&#xff0c;前后试了估计有4家不同的货&#xff0c;终于DFRobot给出最稳定也是最符合MAX17043说明书描述的效果。 本篇继续水&#xff0c;描述一下位操作的一个普遍用法&#xff0c;就是读写各类测量芯片。此处就拿MAX170…

springboot(ssm交通管理在线服务系统 交通管理平台 Java系统

springboot(ssm交通管理在线服务系统 交通管理平台 Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09…