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

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

fs.Dir & fs.Dirent

fs.Dir 是可迭代的目录流的类,fs.Dirent 是遍历 fs.Dir 获得的目录项,可以是文件或目录中的子目录

fs.Dir

  • dir.path:目录的只读路径
  • dir.read():不传入 callabck 函数则返回 Promise,读取迭代器下一个目录项,返回一个 Promise,resolve 后得到 fs.Dirent 或 null(如果没有更多的目录项要读取)
  • dir.close():不传入 callabck 函数则返回 Promise,关闭目录的底层资源句柄

fs.Dirent

  • dirent.name
  • dirent.isDirectory()
  • dirent.isFile()
  • dirent.isSymbolicLink()

fs.opendir

fs.opendir(path[, options], callback) 打开一个目录,返回 fs.Dir 对象

  1. const fs = require('fs/promises');
  2. async function print(path) {
  3. const dir = await fs.opendir(path);
  4. for await (const dirent of dir) {
  5. console.log(dirent.name);
  6. }
  7. }
  8. print('./').catch(console.error);

可以通过 dir.read() 迭代 dir

  1. const fs = require('fs/promises');
  2. async function print(path) {
  3. const dir = await fs.opendir(path);
  4. let dirent = await dir.read();
  5. while (dirent) {
  6. console.log(dirent.name);
  7. dirent = await dir.read();
  8. }
  9. dir.close();
  10. }
  11. print('./').catch(console.error);

fs.readdir

fs.readdir(path[, options], callback) 读取目录的内容,回调有两个参数 (err, files),其中 files 是目录中的文件名的数组(不包括 '.' 和 '..')
options

  • encoding:默认值 utf8,如果 encoding 设置为 'buffer',则返回的文件名是 Buffer 对象
  • withFileTypes:默认值 false,设置为 true 后回调函数 files 数组将包含 fs.Dirent 对象
  1. const fs = require('fs/promises');
  2. async function print(path) {
  3. const files = await fs.readdir(path);
  4. for (const file of files) {
  5. console.log(file);
  6. }
  7. }
  8. print('./').catch(console.error);

fs.mkdir

fs.mkdir(path[, options], callback) 创建目录
options

  • recursive:默认值 false,设置为 true 时候相当命令 mkdir -p 会把不存在的目录创建
  • mode:默认值 0o777,Windows 不支持
  1. // 创建 /tmp/a/apple 目录,无论是否存在 /tmp 和 /tmp/a 目录。
  2. fs.mkdir('/tmp/a/apple', { recursive: true }, err => {
  3. if (err) throw err;
  4. });

fs.rmdir

fs.rmdir(path[, options], callback) fs.rmdir 用于删除文件夹
options

  • recursive:默认值 false,如果为 true,则执行递归的目录删除。在递归模式中,如果 path 不存在则不报告错误,并且在失败时重试操作
  • retryDelay:默认值 100,出现异常后重试之间等待毫秒数。如果 recursive 选项不为 true,则忽略此选项
  • maxRetries:默认值为 0,表示出现异常后重试的次数,如果遇到 EBUSY、 EMFILE、 ENFILE、 ENOTEMPTY 或 EPERM 错误,则 Node.js 将会在每次尝试时以 retryDelay 毫秒的线性回退来重试该操作。 如果 recursive 为 false,则忽略此选项
  1. const fs = require('fs');
  2. fs.rmdir('./tmp', { recursive: true }, err => console.log);

之前 rmdir 只能删除空的文件夹,现在可以连同文件一起删除了

极简 Node.js 入门 - 3.5 文件夹操作的更多相关文章

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

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

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

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

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

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

  4. 极简 Node.js 入门 - 1.2 模块系统

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

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

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

  6. 极简 Node.js 入门 - 1.4 NPM & package.json

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

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

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

  8. 极简 Node.js 入门 - 2.3 process

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

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

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

随机推荐

  1. node日志管理 / pm2-logrotate-ext日志管理

    本篇文章说的是,如何使用pm2管理node项目的日志输出(切割和备份),文章步骤是基于已经安装了pm2的前提下,没有的,请自行百度. 第一步:需要登录公司服务器,查看一下目前服务器保存的所有日志(用于 ...

  2. Asp.Net Core 3.0的依赖注入改变

    Asp.Net Core 3.0出来很久了,预览版的时候就被我偶像Lemon大人,带着尝试摸索了一下这个 那么Asp.Net Core 3.0和Asp.Net Core 2.X到底有哪些区别呢? As ...

  3. Kaggle-SQL(1)

    Getting-started-with-sql-and-bigquery 教程 结构化查询语言(SQL)是数据库使用的编程语言,它是任何数据科学家的一项重要技能. 在本课程中,您将使用BigQuer ...

  4. aria2使用ajax调用/页面浏览器RPC调用aria2

    @ 目录 1. aria2使用ajax调用/页面浏览器RPC调用aria2 1.1. 总结: 1.2. ajax调用aria2-Demo 1.3. postMan命令测试 1.3.1. post基本使 ...

  5. Java多线程入门及实战

    基本概念: 1: 程序 2 进程 3 线程 4 进程和线程的区别 5 进程和程序的区别 Java实现多线程的方法: 1 继承Thread 2 实现Runable 3 实现callable 4 线程池的 ...

  6. WebLogic 省略项目名称

    希望 WebLogic 部署的项目,不需要输入项目名,直接通过IP端口访问. 在 WEB-INF 目录下添加文件 weblogic.xml <?xml version="1.0&quo ...

  7. Solon 最简单demo---Hello World

    Solon 的项目地址: https://gitee.com/noear/solon 里面杂七杂八的东西很多...今天的目标是整一个最最简单,最最小巧的 Hello world (一)用 Intell ...

  8. IndexFlatL2、IndexIVFFlat、IndexIVFPQ三种索引方式示例

    上文针对Faiss安装和一些原理做了简单说明,本文针对标题所列三种索引方式进行编码验证. 首先生成数据集,这里采用100万条数据,每条50维,生成数据做本地化保存,代码如下: import numpy ...

  9. drop、truncate、delete功能介绍和三者间区别

    一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表 ...

  10. html表格、表单

    知识点一:表格 1.表格标签  table 2.表格的组成  行 tr  单元格  td 3.建立表格步骤 1.建立表格, 2.判断行数和列数 3.用行去包含单元格 4.在每个单元格中去添加内容 4. ...