fs.readFile和fs.readFileSync的区别
Node.js内置的fs
模块就是文件系统模块,负责读写文件。
和所有其它JavaScript模块不同的是,fs
模块同时提供了异步和同步的方法。
回顾一下什么是异步方法。因为JavaScript的单线程模型,执行IO操作时,JavaScript代码无需等待,而是传入回调函数后,继续执行后续JavaScript代码。比如jQuery提供的getJSON()
操作:
$.getJSON('http://example.com/ajax', function (data) {console.log('IO结果返回后执行...');
});
console.log('不等待IO结果直接执行后续代码...');
而同步的IO操作则需要等待函数返回:
// 根据网络耗时,函数将执行几十毫秒~几秒不等:
var data = getJSONSync('http://example.com/ajax');
同步操作的好处是代码简单,缺点是程序将等待IO操作,在等待时间内,无法响应其它任何事件。而异步读取不用等待IO操作,但代码较麻烦。
异步读文件
按照JavaScript的标准,异步读取一个文本文件的代码如下:
'use strict';var fs = require('fs');fs.readFile('sample.txt', 'utf-8', function (err, data) {if (err) {console.log(err);} else {console.log(data);}
});
请注意,sample.txt
文件必须在当前目录下,且文件编码为utf-8
。
异步读取时,传入的回调函数接收两个参数,当正常读取时,err
参数为null
,data
参数为读取到的String。当读取发生错误时,err
参数代表一个错误对象,data
为undefined
。这也是Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果。后面我们还会经常编写这种回调函数。
由于err
是否为null
就是判断是否出错的标志,所以通常的判断逻辑总是:
if (err) {// 出错了
} else {// 正常
}
如果我们要读取的文件不是文本文件,而是二进制文件,怎么办?
下面的例子演示了如何读取一个图片文件:
'use strict';var fs = require('fs');fs.readFile('sample.png', function (err, data) {if (err) {console.log(err);} else {console.log(data);console.log(data.length + ' bytes');}
});
当读取二进制文件时,不传入文件编码时,回调函数的data
参数将返回一个Buffer
对象。在Node.js中,Buffer
对象就是一个包含零个或任意个字节的数组(注意和Array不同)。
Buffer
对象可以和String作转换,例如,把一个Buffer
对象转换成String:
// Buffer -> String
var text = data.toString('utf-8');
console.log(text);
或者把一个String转换成Buffer
:
// String -> Buffer
var buf = Buffer.from(text, 'utf-8');
console.log(buf);
同步读文件
除了标准的异步读取模式外,fs
也提供相应的同步读取函数。同步读取的函数和异步函数相比,多了一个Sync
后缀,并且不接收回调函数,函数直接返回结果。
用fs
模块同步读取一个文本文件的代码如下:
'use strict';var fs = require('fs');var data = fs.readFileSync('sample.txt', 'utf-8');
console.log(data);
可见,原异步调用的回调函数的data
被函数直接返回,函数名需要改为readFileSync
,其它参数不变。
如果同步读取文件发生错误,则需要用try...catch
捕获该错误:
try {var data = fs.readFileSync('sample.txt', 'utf-8');console.log(data);
} catch (err) {// 出错了
}
转载:https://www.liaoxuefeng.com/wiki/1022910821149312/1023025763380448
fs.readFile和fs.readFileSync的区别相关推荐
- node.js中fs.readFile和fs.readFileSync的使用
博客由来: var admins;var admins2;await fs.readFile(path.resolve(__dirname,'../../admins.json'),function( ...
- Node.js: fs.readFile/writeFile 和 fs.createReadStream/writeStream 区别
1. 先说说各自的用法: How do I read files in node.js? fs = require('fs'); fs.readFile(file, [encoding], [call ...
- 模板引擎不关心内容之——art-template,碰见的同步与fs.readFile异步以及函数回调问题的描述,针对fs的readfille读取文件时,返回不了异步函数返回值的解决方法
模板引擎不关心内容 art-template art-template不仅可以在浏览器使用,也可以在node中使用 npm install art-template该命令在哪执行就会把包下载在哪里,默 ...
- js处理本地.bin音频文件和node.js的fs模块处理本地.bin音频区别
1.js处理本地.bin文件 <body><input type="file" name="" id="fileInput" ...
- java readfile函数_从fs.readFile获取数据
回答(13) 2 years ago 在ES7中使用Promise 与mz / fs异步使用 mz模块提供核心节点库的promisified版本 . 使用它们很简单 . 首先安装库... npm in ...
- fs.readfile 显示html,从fs.readFile获取数据
小编典典 为了详细说明@Raynos所说的内容,您定义的函数是一个异步回调.它不会立即执行,而是在文件加载完成后执行.当您调用readFile时,将立即返回控件并执行下一行代码.因此,当您调用cons ...
- fs.readfile 显示html,javascript – 从fs.readFile获取数据
要详细说明@Raynos说,你定义的函数是异步回调.它不会立即执行,而是在文件加载完成时执行.当调用readFile时,将立即返回控制并执行下一行代码.因此,当您调用console.log时,您的回调 ...
- VScode运行fs.readFile时报错no such file or directory或无法输出data或undefined
这个问题我在网上查找解决办法的时候大多都是说异步的问题,然而用了那些所谓的解决办法后还是输出不了data的值,显然不是异步的问题,今天记录下踩坑. 如果Code Runner插件配置完毕,可以跳过第一 ...
- node.js:fs.open 和 fs.write 读取文件和改写文件
node.js fs.open 和 fs.write 读取文件和改写文件 Node.js的文件系统的Api //公共引用 var fs = require('fs'), path = require( ...
最新文章
- 基于HTML5的Google水下搜索
- js字符串的各种格式的转换 ToString,Format
- c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)
- Linux记录-CPU指标介绍
- C++中include 与 include 的区别
- SVN 清理失败解决方案
- Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)
- leetcode python3 简单题1.Two Sum
- 基于 iso 镜像构建 yum 本地源
- Go语言 for循环案例
- Java实现简单的QQ登录界面
- 动手学 《动手学深度学习》(安装pytorch)
- 波士顿学院计算机科学专业,波士顿学院计算机专业好吗?_托普仕留学
- 数商云大宗商品交易平台案例:打造B2B大宗电商供应链服务系统,落地产业互联网
- 关于制作FlappyBird无限地面的一些问题
- 更省密令是什么?更省密令填什么
- 相似图片搜索、算法、识别的原理解析(上)
- 基于思科模拟器进行子网划分
- 用.bat文件打开程序
- Zircon 与 LK
热门文章
- swift 和 oc混编 找不到头文件等问题
- linux下的iic驱动程序,实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序...
- 贝叶思咨询:中国手机游戏的创业机会
- Codeforces Round #811 (Div. 3)
- [网络安全技术文章之其一] 给数据科学家的十条数据安全建议
- uefi安装win10原版镜像|uefi gpt模式安装win10官方系统教程
- mysql虚拟主机_远程连接mysql要点 虚拟主机定义与分类
- 沈梦黑发骗子骗术揭秘
- Windows Update有用吗
- 03 KEY BUZZ