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.hqwc.cn/news/307228.html

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

相关文章

C语言rand函数,srand函数,time函数实现随机数,及猜数字小游戏

怀心之所爱&#xff0c;奔赴山河 前言 最近在复习c的知识&#xff0c;想起之前写过一个猜数字小游戏&#xff0c;所以今天就把自己关于随机数的使用经验分享一下&#xff0c;希望对大家有帮助。 一.rand函数 1.函数的声明如下 可以看到&#xff0c;返回值是int类型&#xff…

【黑产攻防道04】利用pow工作量证明降低黑产的破解效率

上一期我们提到&#xff0c;黑产有三种常见的破解方式&#xff1a; 1.通过识别出验证码图片答案实现批量破解验证&#xff0c;即图片答案识别&#xff1b; 2.在了解通讯流程之后直接携带相关参数发请求&#xff0c;即协议破解&#xff1b; 3.使用各种客户端模拟器来模拟真人…

分享72个Python爬虫源码总有一个是你想要的

分享72个Python爬虫源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1v2P4l5R6KT2Ul-oe2SF8cw?pwd6666 提取码&#xff1a;6666 项目名称 10 photo websites…

盘点2023 | 校企合作结硕果,产教融合谱新篇

回首2023&#xff0c;电巢科技与众多高校建立了紧密的合作关系&#xff0c;以实习就业为导向&#xff0c;帮助学生打开技术和产业视野&#xff0c;提前做好职业发展规划&#xff0c;按照电子行业的企业用人标准&#xff0c;帮助高校进行“人才前置化”培养&#xff0c;并且持续…

如何使用ArcGIS Pro自动矢量化建筑

相信你在使用ArcGIS Pro的时候已经发现了一个问题&#xff0c;那就是ArcGIS Pro没有ArcScan&#xff0c;在ArcGIS Pro中&#xff0c;Esri确实已经移除了ArcScan&#xff0c;没有了ArcScan我们如何自动矢量化地图&#xff0c;从地图中提取建筑等要素呢&#xff0c;这里为大家介绍…

一文详解Cookie以及Selenium自动获取Cookie

前言 以后数据获取途径以及数据资产绝对会是未来核心要素生产工具和资源之一&#xff0c;每个大模型都离不开更加精细化数据的二次喂养训练。不过现在来看收集大量数据的方法还是有很多途径的&#xff0c;有些垂直领域的专业数据是很难获取得到的&#xff0c;靠人力去搜寻相当…

【滑动窗口】【二分查找】C++算法:和至少为 K 的最短子数组

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 有序向量 二分查找 LeetCode862:和至少为 K 的最短子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;找出 nums 中和至少为 k 的 最短非空子数组 &#xff0c;并返回…

安装 PyQt5 保姆级教程

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 博主之前做应用层开发用的一直是 Qt&#xff0c;这次尝试一下在 python 中使用 Pyqt5 模块来开发 UI 界面&#xff0c;这里做一些…

[电磁学]大学物理陈秉乾老师课程笔记

主页有博主其他上万字的精品笔记,都在不断完善ing~ 第一讲 绪论,库仑定律 主要讲解了电磁学中的库伦定律和电场的相关概念&#xff0c;介绍了电荷和电磁相互作用的规律&#xff0c;并讲解了电场强度和电势的概念。 03:14 &#x1f393; 库伦定律&#xff1a;电势能与电荷的关…

通过学习这些技巧,让你的Python代码更加简洁和高效

文章目录 前言列表性能陷阱陷阱一陷阱二 快速合并字典通过有序字典去重最后Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全职路线 前言 今天看到一些关于容器的使用技巧&am…

Transformer各模块结构详解(附图)

前言&#xff1a;基于TRANSFORMER的结构在视觉领域是承上启下的作用。刚接触会比较难&#xff0c;上的话需要对RNN&#xff0c;LSTM&#xff0c;ATTENTION先有初步的了解。下的话需要学习VIT&#xff0c;GPT&#xff0c;DETR等结构先了解TRANSFORMER都是必要的。 参考&#xff…

阿里云2核2G3M轻量应用服务器又降了1块钱?

阿里云和腾讯云怎么了&#xff1f;之前轻量应用服务器2核2G3M配置阿里云降价到63元一年&#xff0c;同款配置的腾讯云轻量应用服务器2核2G3M配置降价为62元一年&#xff0c;现在阿里云这台云服务器又降价了&#xff0c;现在是61元一年&#xff0c;真无语&#xff0c;阿腾云aten…