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://xiahunao.cn/news/2661434.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vue data变量不能以“_”开头,否则会产生很多怪异问题

1、 比如给子组件赋值&#xff0c;子组件无法得到这个值&#xff08;也不是一直无法得到&#xff0c;设置后this.$forceUpdate() 居然可以得到&#xff09;&#xff0c; 更无法watch到 <zizujian :config"_config1"> </zizujian>this._config1 { ...…

【微服务核心】MyBatis Plus

MyBatis Plus 文章目录 MyBatis Plus1. 简介2. 入门使用3. 核心功能3.1 CRUD 接口3.1.1 Mapper CRUD 接口3.1.2 Service CRUD 接口 3.2 条件构造器3.3 分页插件3.4 Mybatis-Plus 注解 4. 拓展4.1 逻辑删除4.2 MybatisX快速开发插件 5. 插件5.1 [分页插件](#page)5.2 乐观锁插件…

如何从RTP包的AP类型包,获取h265的PPS、SPS、VPS信息

ffmpeg播放rtp流&#xff0c;为了降低首开延迟&#xff0c;需要在SDP文件中指定PPS、SPS、VPS信息。抓包后发现wireshark无法解析AP包。需要自己进行AP包解析。RTP协议AP包格式如下&#xff1a; 根据如上信息&#xff0c;我们可以解析AP包&#xff0c;效果如下 40 01&#xff…

Windows上安装NodeJs

Windows上安装NodeJs 一、操作环境 操作系统: Windows 10 专业版 SDK:NodeJs v16.19.1&#xff08;安装鸿蒙IDE自动安装的NodeJs&#xff09; 二、安装过程 2.1下载Node.js安装包 官网下载地址&#xff1a; 下载历史版本安装也可 2.2 双击下载好的安装文件 2.3 打开下载…

ClickHouse基础知识(五):ClickHouse的SQL 操作

基本上来说传统关系型数据库&#xff08;以 MySQL 为例&#xff09;的 SQL 语句&#xff0c;ClickHouse 基本都支持&#xff0c; 这里不会从头讲解 SQL 语法只介绍 ClickHouse 与标准 SQL&#xff08;MySQL&#xff09;不一致的地方。 1. Insert 基本与标准 SQL&#xff08;My…

如何基于一台MacBook搞定企业级大模型知识库部署

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《ChatGLM3/Qwen业务案例实战》 —1— 为什么要在 MacBook 上搭建知识库&#xff1f; 最核心最重要的是我们手上的文档资料出于安全要求&#xff0c;不能随便上传到云服务&#xff0c;也就无法实际验证知识库的…

统信操作系统中QWebEngine(js与C++交互)

一、直接方式C++调用JS函数 1.1 编写C++界面框架 界面有两个控件组成。QWebEngineView和QPushButton组成。上面部分位webengineview 下面部分位C++的按钮。 处理逻辑是希望按钮按下QPushButton的直接调用QWebEngineView中js定义好的函数。 大致内容如下图: mainwindow.cpp文…

刷算法-- leetcode 96. 不同的二叉搜索树

思路 观察树的组成&#xff0c;可以发现n3时的二叉搜索树可以由&#xff0c;头节点分别为1、2、3时的所有结果组成&#xff01;定义dp[i]为由i个节点组成的二叉搜索树的个数。确定递推公式&#xff0c;dp[i] 由1为头节点组成的二叉搜索树个数由2为头组成的个数…由i为头节点组…

Go 泛型之泛型约束

Go 泛型之泛型约束 文章目录 Go 泛型之泛型约束一、引入二、最宽松的约束&#xff1a;any三、支持比较操作的内置约束&#xff1a;comparable四、自定义约束五、类型集合&#xff08;type set&#xff09;六、简化版的约束形式七、约束的类型推断八、小结 一、引入 虽然泛型是…

等保测评里面,帐号和短信验证码双因子认证机制

短信验证参数检查过滤器 public class MultiTextMessageFilter implements Filter {private AntPathRequestMatcher matcher new AntPathRequestMatcher("/oauth/token");Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterC…

电脑亮度怎么调?揭开亮度调节的秘密!

电脑亮度调节是一项基本的系统设置&#xff0c;它不仅影响我们的视觉体验&#xff0c;还有助于减轻眼部疲劳。可是电脑亮度怎么调呢&#xff1f;本文将介绍三种不同的电脑亮度调节方法&#xff0c;适用于Windows和常见的笔记本电脑&#xff0c;让您的屏幕明亮如新。 方法1&…

数据库管理-第128期 2023总结(202301229)

数据库管理-第128期 2023总结&#xff08;202301229&#xff09; 到了2023年的最后一个工作日&#xff0c;也该对即将过去的2023年做一个小小的总结&#xff1a; 1 写文章 2023年在CSDN总共写了82篇文章。 2023年4月开始在墨天轮写文章&#xff0c;总共写了75篇文章&#xf…

构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践

作者&#xff1a;柳下 概述 随着企业规模和数据量的增长&#xff0c;数据的价值越来越受到重视。数据的变化和更新变得更加频繁和复杂&#xff0c;因此及时捕获和处理这些变化变得至关重要。为了满足这一需求&#xff0c;数据库 CDC&#xff08;Change Data Capture&#xff…

Python自动化办公指南

文章目录 前言文件处理数据处理网络爬虫自动化操作 如何开始Python自动化办公结论Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全职路线 前言 Python自动化办公一般可以分为…

C实现数组奇数在前偶数在后排序

一、运行结果&#xff1b; 二、源码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现调整函数move_odd_even函数&#xff1b; void move_odd_even(int arr[], int sz) {//初始化变量值&#xff1b;int left 0;int right sz - 1;//循环判断和…

作业--day38

1.定义一个Person类&#xff0c;包含私有成员&#xff0c;int *age&#xff0c;string &name&#xff0c;一个Stu类&#xff0c;包含私有成员double *score&#xff0c;Person p1&#xff0c;写出Person类和Stu类的特殊成员函数&#xff0c;并写一个Stu的show函数&#xff…

安装 PyQt5 保姆级教程

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

(JAVA)-(多线程)-线程池

线程池&#xff0c;顾名思义就是存放线程的池子&#xff0c;当有任务时能够随时取用线程&#xff0c;任务结束后能够放回线程池中。如果把线程比成碗&#xff0c;线程池就像一个碗柜一样。 使用线程池的好处&#xff1a; 1.当有大量线程对象时&#xff0c;减少了线程创建销毁…

获取拼多多商品详情页数据SKU价格等

拼多多根据ID取商品详情 API 返回值说明 item_get-根据ID取商品详情 pinduoduo.item_get 响应参数 请求测试链接 名称类型必须示例值描述 num_iid String01999629976商品ID title String02019新款女装短袖t恤女夏宽松韩版休闲上衣百搭蝙蝠衫五分袖体恤商品标题 price Flo…

Ubuntu安装K8S(1.28版本,基于containrd)

原文网址&#xff1a;Ubuntu安装K8S(1.28版本&#xff0c;基于containrd&#xff09;-CSDN博客 简介 本文介绍Ubuntu安装K8S的方法。 官网文档&#xff1a;这里 1.安装K8S 1.让apt支持SSL传输 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certi…