极简 Node.js 入门 - 3.1 File System API 风格
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node
Node.js 对文件、文件夹读写操作主要靠内置的 fs 模块
const fs = require('fs');
fs 模块提供了几种不同调用风格的 API 支持文件读写,fs.stat 方法可以获取文件的基本信息,下面示例展示了不同风格 API 调用 fs.stat 方法
callback 风格
Node.js 默认的异步操作是 callback 风格 callback(err, returnValue)
- err: 如果程序处理出现异常,错误信息放在回调函数的第一个参数,如果没有错误 err 为 null
- returnValue:程序正常处理完成后结果放在回调函数第二个参数
const fs = require('fs');
fs.stat('.', (err, stats) => {
if(err) {
// 处理错误。
} else {
// 使用 stats
}
});
fs promise API
fs.promises API 提供了一组和 callback 风格对应的方法,返回 Promise 对象而不使用回调,避免出现 callback 嵌套的回调地狱问题
API 可通过 require('fs').promises 或 require('fs/promises')访问
require('fs/promises') v14 后可用
const fs = require('fs').promises;
// const fs = require('fs/promises');
fs.stat('.').then(stats => {
// 使用 stats
}).catch(error => {
// 处理错误
});
promisify
Node.js 使用回调风格一方面是因为性能原因,一方面是因为 Node.js 诞生的时候 Promise 规范还没有制定,在 Promise 规范制定后 Node.js 通过内置模块 util 提供的 promisify 方法可以把所有标准 callback 风格方法转成 promise 风格方法
const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
stat('.').then(stats => {
// 使用 stats
}).catch(error => {
// 处理错误
});
同步方法
很多时候需要读写文件后才能进行某些操作,在没有性能问题的场景可以使用 fs 提供的同步函数来降低代码复杂度
fs 为大部分方法提供了一个同步版本,命名规则是方法名称后面添加 Sync ,比如 fs.readFile 和 fs.readFileSync,stat 方法也有对应的同步版本
const fs = require('fs');
try {
const stats = fs.statSync('.');
// 使用 stats
} catch(error) {
// 处理错误
}
stat
上面例子简单使用过 fs.stat 方法获取文件基本信息,如果打印 stats 对象可以得到文件基本属性
Stats {
dev: 16777220,
mode: 16877,
nlink: 3,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4096,
ino: 4301278483,
size: 96,
blocks: 0,
atimeMs: 1588483554315.173,
mtimeMs: 1588483370684.5703,
ctimeMs: 1588483370684.5703,
birthtimeMs: 1588483342193.8625,
atime: 2020-05-03T05:25:54.315Z,
mtime: 2020-05-03T05:22:50.685Z,
ctime: 2020-05-03T05:22:50.685Z,
birthtime: 2020-05-03T05:22:22.194Z
}
stats 对象还提供了几个非常有用的属性、方法获取文件的更多信息,比较常用的有
- stats.isDirectory():判断文件是否是个文件夹
- stats.isFile():判断文件是否是普通文件
- stats.isSymbolicLink():判断文件是否是软链接
- stats.size:获取文件字节数
const fs = require('fs');
fs.stat('.', (err, stats) => {
if(!err) {
console.log(stats);
console.log(stats.isFile());
console.log(stats.size);
}
});
极简 Node.js 入门 - 3.1 File System API 风格的更多相关文章
- 极简 Node.js 入门 - 1.3 调试
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.1 Path
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.4 定时器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 3.2 文件读取
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 3.3 文件写入
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 3.4 文件夹写入
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 3.5 文件夹操作
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 5.3 静态资源服务器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - Node.js 是什么、性能有优势?
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
随机推荐
- CENTOS下搭建git代码仓库 ssh协议
centos服务器下搭建git仓库,使用ssh协议管理仓库代码权限 git官网(http://git-scm.com/) 使用ssh协议: 一.安装git,使用yum install git 或 ...
- 【计网】图解HTTP常见知识点总结
目录 目录 目录 初识TCP/IP TCP/IP协议族4层模型 初识HTTP 请求和响应 HTTP报文 HTTP状态码 HTTP报文首部 其他的首部字段 确保WEB安全的HTTPS HTTPS工作原理 ...
- echarts 实战 : 图表竖着或横着是怎样判定的?
这个问题比较简单. echarts 的图表默认是竖着的. 只要 xAxis 和 yAxis 互换,竖着的图就变成了横着的图了. 所以我们可以可以写一个xy轴互换的方法. reverseXYAxis = ...
- 由一个计数器出发:关于vue使用独立js文件的问题
最近有个vue项目要用ztree. 然后,我想把一些逻辑提出来作为公共的方法,放到独立的js文件里. ztreeTool.js import $ from 'jquery' export defaul ...
- java基础知识--入门程序说明
①main方法:称为主方法,写法格式固定,是程序的入口或起始点,无论我们编写多少程序,JVM在运行的时候,都会从main方法这里开始执行. ②注释:对代码的解释说明.单行注释//.多行注释/* */. ...
- windows 下部署 .netcore 到 iis
园子里已经有许多 ASP.NET Core 部署的相关文章,不同环境有不同的配置方法,建议同鞋们在动手之前也看看官方说明,做到心中有数.我在实践的时候用的是 win8.1 + .net core 3 ...
- AList的具体实现 #CS61B-sp18-2.5
实现一个Array based list,其功能包括获取长度size,添加元素至最后addLast,得到元素get和去除最后一个元素. 设计思路及其实现: 我们都知道在获取数据的时候,直接调用缓存里面 ...
- ASP.NET Core 监听SQL Server数据库的实时信息
1.开发环境: 开发工具:Visual Studio 2019 数据库:SQL Server2012 开发环境:.Net Core 3.1 2.使用技术: Signalr:实现消息推送 SqlDepe ...
- Python os.read() 方法
概述 os.read() 方法用于从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串.高佣联盟 www.cgewang.com ...
- PHP fclose() 函数
定义和用法 fclose() 函数关闭打开的文件. 该函数如果成功则返回 TRUE,如果失败则返回 FALSE. 语法 fclose(file) 参数 描述 file 必需.规定要关闭的文件. 实例 ...