极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node

本文更佳阅读体验:https://www.yuque.com/sunluyong/node/fs-api-style

Node.js 对文件、文件夹读写操作主要靠内置的 fs 模块

const fs = require('fs');

fs 模块提供了几种不同调用风格的 API 支持文件读写,fs.stat 方法可以获取文件的基本信息,下面示例展示了不同风格 API 调用 fs.stat 方法

callback 风格

Node.js 默认的异步操作是 callback 风格 callback(err, returnValue)

  1. err: 如果程序处理出现异常,错误信息放在回调函数的第一个参数,如果没有错误 err 为 null
  2. 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').promisesrequire('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 对象还提供了几个非常有用的属性、方法获取文件的更多信息,比较常用的有

  1. stats.isDirectory():判断文件是否是个文件夹
  2. stats.isFile():判断文件是否是普通文件
  3. stats.isSymbolicLink():判断文件是否是软链接
  4. 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 风格的更多相关文章

  1. 极简 Node.js 入门 - 1.3 调试

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  2. 极简 Node.js 入门 - 2.1 Path

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  3. 极简 Node.js 入门 - 2.4 定时器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  4. 极简 Node.js 入门 - 3.2 文件读取

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  5. 极简 Node.js 入门 - 3.3 文件写入

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  6. 极简 Node.js 入门 - 3.4 文件夹写入

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. 极简 Node.js 入门 - 3.5 文件夹操作

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  8. 极简 Node.js 入门 - 5.3 静态资源服务器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  9. 极简 Node.js 入门 - Node.js 是什么、性能有优势?

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

随机推荐

  1. 学习 bypass csp记录

    最近看到一篇bypas csp的记录复现学习下 配置csp 这里直接设置html头达到配置csp的效果. Content-Security-Policy: script-src 'self' 'uns ...

  2. jmeter之断言、数据提取器(正则表达式、jsonpath、beanshell)、聚合报告、参数化

    ctx - ( JMeterContext) - gives access to the context vars - ( JMeterVariables) - gives read/write ac ...

  3. 一个文本框的各项说明,包括类似html的table

    https://www.cnblogs.com/zhqiux/archive/2013/09/03/3298654.html

  4. Python延迟初始化(lazy property)

    转自:https://blog.csdn.net/azsx02/article/details/77649527 Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建 ...

  5. Spring中与bean有关的生命周期

    前言 记得以前的时候,每次提起Spring中的bean相关的生命周期时,内心都无比的恐惧,因为好像有很多,自己又理不清楚,然后看网上的帖子,好像都是那么一套,什么beanFactory啊,aware接 ...

  6. linux root 与普通用户之间的切换

    test@ubuntu:~$ su Password:  root@ubuntu:/home/uu# 也可以是从root用户切换到普通用户.如果当前是root用户,那么切换成普通用户uu用以下命令:s ...

  7. 面试官你好,我已经掌握了MySQL主从配置和读写分离,你看我还有机会吗?

    我是风筝,公众号「古时的风筝」,一个简单的程序员鼓励师. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 面试官:我看你简历上写的你们公司数据库是 ...

  8. PHP date_interval_format() 函数

    ------------恢复内容开始------------ 计算两个日期间的间隔,然后格式化时间间隔: 实例 <?php $date1=date_create("2013-01-01 ...

  9. PHP mkdir() 函数

    定义和用法 mkdir() 函数创建目录. 如果成功该函数返回 TRUE,如果失败则返回 FALSE. 语法 mkdir(path,mode,recursive,context) 参数 描述 path ...

  10. PHP imagecharup - 垂直地画一个字符

    imagecharup — 垂直地画一个字符.高佣联盟 www.cgewang.com 语法 bool imagecharup ( resource $image , int $font , int ...