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 > 允许中止正在进行的读取文件
'a'
: 打开文件进行追加。 如果文件不存在,则创建该文件。‘ax’: 类似于 ‘a’ 但如果路径存在则失败。'a+'
: 打开文件进行读取和追加。 如果文件不存在,则创建该文件。'ax+'
: 类似于 ‘a+’ 但如果路径存在则失败。'as'
: 以同步模式打开文件进行追加。 如果文件不存在,则创建该文件。'as+'
: 以同步模式打开文件进行读取和追加。 如果文件不存在,则创建该文件。'r'
: 打开文件进行读取。 如果文件不存在,则会发生异常。'r+'
: 打开文件进行读写。 如果文件不存在,则会发生异常。'rs+'
: 以同步模式打开文件进行读写。 指示操作系统绕过本地文件系统缓存。(这主要用于在 NFS 挂载上打开文件,因为它允许跳过可能过时的本地缓存。 它对 I/O 性能有非常实际的影响,因此除非需要,否则不建议使用此标志。这不会将 fs.open() 或 fsPromises.open() 变成同步阻塞调用。 如果需要同步操作,应该使用类似 fs.openSync() 的东西。)'w'
: 打开文件进行写入。 创建(如果它不存在)或截断(如果它存在)该文件。'wx'
: 类似于 ‘w’ 但如果路径存在则失败。'w+'
: 打开文件进行读写。 创建(如果它不存在)或截断(如果它存在)该文件。'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 参数的意思
flags
: 用于指定文件打开的方式,默认为 “r”,表示以只读方式打开文件。其他常见的取值包括 “w”(写入)、“a”(追加)等- encoding: 用于指定读取文件时的编码方式,默认为 null,表示以原始的 Buffer 形式进行读取。可以设置为诸如 “utf8”、“ascii”、“base64” 等字符串,以将读取的数据转换为相应的字符编码。
- fd: 文件描述符,可以用于指定已经打开的文件的文件描述符
- mode: 用于设置文件的权限,默认为 0o666
- autoClose: 用于指示在流结束时是否自动关闭底层的资源,默认为 true
- emitClose:用于指定在流关闭时是否触发 close 事件,默认值为 true
- start: 指定从文件中读取的起始位置的偏移量
- end: 指定从文件中读取的结束位置的偏移量
- highWaterMark: 用于设置缓冲区大小,表示每次从底层资源读取的最大字节数,默认 64* 1024
代码示例
可以设置
highWaterMark
,默认值是64*1024KB
,默认单位是字节
, 上面的代码就是 每次读取 400 字节
highWaterMark 是 Node.js 中可读流和可写流的一个选项,用于设置缓冲区大小
。对于可读流来说,它表示每次从底层资源读取数据时的最大字节数
,默认值为 64KB。如果正在读取的数据超过了 highWaterMark 的大小,则会暂停读取,直到当前缓冲区中的数据被消费完毕,以保证内存不会被过度占用
文章来源:https://blog.csdn.net/qq_45634593/article/details/135285119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!