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

2023-12-29 12:50:58

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 > 默认值 null
	flag:< 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 > 默认值 null
	flag:< 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 > 默认值 null
	flag:< 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 的大小,则会暂停读取,直到当前缓冲区中的数据被消费完毕,以保证内存不会被过度占用

文章来源:https://blog.csdn.net/qq_45634593/article/details/135285119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。