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&…

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;只返回可以使用在…

116基于matlab的盲源信号分离

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

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

搜索方法引用位置的时候&#xff0c;如果该方法是接口定义出来的&#xff0c;则结果里会包含其他实现类的该方法的引用位置&#xff0c;但是像Object定义的Equals方法这种&#xff0c;搜索出来的结果是超级多的&#xff0c;根据没法看&#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 多数软件的默认安装的地…

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

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

基于ssm食用菌菌棒溯源系统的开发与设计论文

食用菌菌棒溯源系统 摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的管理系统。本文介绍了食用菌菌棒溯源系统的开发全过程。通过分析企业对于食用菌菌棒溯源系统的需求&#xff0c;创建了一个计算机管理食用菌菌棒溯源系统的方案。文章介绍了食用菌…

深入理解Mysql MHA高可用集群搭建:从实验到实战

1. 简介 MHA&#xff08;Master High Availability&#xff09;是一个高效的开源MySQL高可用性解决方案。由日本开发者yoshinorim&#xff08;前DeNA员工&#xff0c;现在Facebook&#xff09;创建&#xff0c;MHA支持MySQL的主从复制架构&#xff0c;自动化主节点故障转移。当…

<JavaEE> TCP 的通信机制(五) -- 延时应答、捎带应答、面向字节流

目录 TCP的通信机制的核心特性 七、延时应答 1&#xff09;什么是延时应答&#xff1f; 2&#xff09;延时应答的作用 八、捎带应答 1&#xff09;什么是捎带应答&#xff1f; 2&#xff09;捎带应答的作用 九、面向字节流 1&#xff09;沾包问题 2&#xff09;“沾包…

JavaSE基础50题:28.(数组练习)冒泡排序

概述 给定一个整型数组&#xff0c;实现冒泡排序。 如&#xff1a;给一组数组{5&#xff0c;10&#xff0c;8&#xff0c;3&#xff0c;7}进行冒泡排序。 j一直往下走&#xff0c;和下一个数字进行比较&#xff0c;如果当前数字大于下一个数字&#xff0c;则两个数字交换&…

【Java干货教程】JSON,JSONObject,JSONArray类详解

一、定义 JSON&#xff1a;就是一种轻量级的数据交换格式&#xff0c;被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构&#xff0c;易于阅读和编写&#xff1b;同时也易于机器解析和生成&#xff0c;有效的提升网络传输效率&#xff1b;支持多种语言&#xff0c;很多…

ERROR: No matching distribution found for torch==2.0.1解决方案

大家好&#xff0c;我是水滴~~ 本文主要介绍在安装 stable-diffusion-webui 时出现的 ERROR: No matching distribution found for torch2.0.1 问题的解决方案&#xff0c;希望能对你有所帮助。 《Python入门核心技术》专栏总目录・点这里 文章目录 问题描述解决方案离线安装 …

PostgreSQL 数据库归档最近被问及的问题问题 与 4 毋 处世学

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1790人左右 1 2 3 4 5&#xff0…

小型企业成为网络犯罪分子获取数据的目标

在过去十年的大部分时间里&#xff0c;网络犯罪的巨额资金来自针对大型组织的勒索软件攻击。这种威胁仍然存在。但犯罪分子可能会将注意力转向中小企业 (SMB)。这对消费者的影响将是巨大的。 将软件即服务 (SaaS) 技术用于核心业务功能继续将中小企业整合到全球供应链中。由于…