fs.readdirSync的应用与案例详解

Node.js中的文件系统模块(fs模块)提供了许多API用于处理文件和目录。其中,fs.readdirSync()函数是Node.js中最常用的文件和文件夹处理函数之一。fs.readdirSync()方法用于同步读取指定目录中的所有文件名或文件夹名,返回一个包含所有文件名和文件夹名的数组。

一、读取指定目录函数

fs.readdirSync()函数接收两个参数

fs.readdirSync(path[, options])

path参数为要读取的目录路径,可以是绝对路径或相对路径。options参数为一个对象,可以省略。该对象的属性有:

- encoding : 返回文件名的编码格式,默认为 'utf8'
- withFileTypes : 是否处理文件夹和文件类型,默认为false

下面我们以读取’/home/user/documents/’目录下的所有文件为例,进行示范。

const fs = require('fs')
const path = '/home/user/documents/'

try {
  const fileNames = fs.readdirSync(path)
  console.log(fileNames)
} catch (err) {
  console.log(err)
}

输出结果如下:

[
    'file1.txt',
    'file2.md',
    'folder1',
    'folder2'
]

为了方便起见,代码中使用try-catch语句捕捉了错误。如果目录不存在或读取失败,程序将抛出错误。

二、读取指定文件夹下的所有文件

使用fs.readdirSync()函数读取指定目录下的所有文件,需要遍历目录中所有的文件和文件夹,并将每个文件和文件夹名存储到一个数组中。

下面我们以读取’/home/user/documents/folder1/’文件夹下的所有文件为例,进行示范。

const fs = require('fs')
const path = '/home/user/documents/folder1/'

try {
    const fileNames = fs.readdirSync(path)
    const files = fileNames.map((file) => path + file)
    console.log(files) 
} catch (err) {
    console.log(err)
}

输出结果如下:

[
    '/home/user/documents/folder1/file1.txt',
    '/home/user/documents/folder1/file2.jpeg',
    '/home/user/documents/folder1/file3.md'
]

使用map()函数的主要目的是将文件名的数组转化为文件路径的数组,因为fs模块的读取函数需要使用完整的文件路径。

三、读取指定文件夹下的所有子文件夹

使用fs.readdirSync()函数读取指定目录下的所有子文件夹,同样需要遍历目录中所有的文件和文件夹,并将每个子文件夹名存储到一个数组中。

下面我们以读取’/home/user/documents/folder1/’文件夹下的所有子文件夹为例,进行示范。

const fs = require('fs')
const path = '/home/user/documents/folder1/'

try {
    const fileNames = fs.readdirSync(path, {withFileTypes: true})
    const dirs = fileNames.filter((dirent) => dirent.isDirectory())
      .map((dirent) => path + dirent.name)
    console.log(dirs) 
} catch (err) {
    console.log(err)
}

输出结果如下:

[
    '/home/user/documents/folder1/subfolder1',
    '/home/user/documents/folder1/subfolder2'
]

首先在fs.readdirSync()函数中加入{withFileTypes: true}作为options参数,这样返回的数组不仅包含文件或文件夹的名字,还指示fs模块返回一个Dirent对象来处理文件和目录。使用map()函数将每个子文件夹的name属性添加到该数组中。

四、同步遍历文件夹

使用fs.readdirSync()函数可以遍历目录下的所有文件和文件夹,但是当文件夹的层数较深时,代码会变得非常复杂。建议使用递归函数来实现同步遍历。

const fs = require('fs')
const path = '/home/user/documents/'

function traverseDir(path) {
    const fileNames = fs.readdirSync(path, {withFileTypes: true})
    const files = []
    const dirs = []
    fileNames.forEach((dirent) => {
        const fullPath = path + dirent.name
        if(dirent.isDirectory()) {
            dirs.push(fullPath)
            const childFiles = traverseDir(fullPath + '/')
            files.push(...childFiles)
        } else {
            files.push(fullPath)
        }
    })
    return files
}

try {
    const files = traverseDir(path)
    console.log(files)
} catch (err) {
    console.log(err)
}

输出结果为该目录下所有文件的路径数组。

在traverseDir()函数中,首先使用fs.readdirSync()读取指定目录下的所有文件和文件夹名字,并根据类型分别存储到文件数组和文件夹数组中。然后,遍历文件夹数组,对于每一个文件夹递归调用traverseDir()函数,并将返回的文件数组添加到总文件数组中。最后,将文件数组返回。

五、总结

fs.readdirSync()函数是Node.js中最常用的文件系统模块之一。它能够同步读取指定目录下的所有文件和文件夹名字,可以用于遍历目录,实现一些文件操作,如复制、删除等。但是需要注意,在同步模式中,该函数会阻塞JavaScript进程的执行,因此在处理大量文件或文件夹时,可能会耗费大量时间。因此,如果需要处理大量的文件或文件夹,建议使用异步的方式进行操作。

原创文章,作者:XDGRY,如若转载,请注明出处:https://www.506064.com/n/325572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XDGRYXDGRY
上一篇 2025-01-13 13:24
下一篇 2025-01-13 13:24

相关推荐

  • Python数据统计案例的实现

    Python作为一个高级编程语言,拥有着丰富的数据处理库和工具,能够快速、高效地进行各类数据处理和分析。本文将结合实例,从多个方面详细阐述Python数据统计的实现。 一、数据读取…

    编程 2025-04-29
  • yarn npm 仓库用法介绍及使用案例

    本文将从多个方面对yarn npm仓库进行详细阐述,并为你提供一些实际使用案例。 一、npm和yarn的比较 npm和yarn都是JavaScript的包管理工具。npm在Java…

    编程 2025-04-27
  • Python财务分析案例

    本文将以一个具体的案例为例,介绍如何使用Python进行财务分析。本文将从多个方面进行阐述。 一、数据收集和清洗 数据收集和清洗是财务分析的第一步。我们需要从不同数据源中收集数据,…

    编程 2025-04-27
  • Python项目案例:人脸识别

    人脸识别是指通过计算机对人脸图像进行分析,识别出人脸上的一些信息,如人脸的位置、大小、姿态、形状、以及其中的眼睛、鼻子、嘴巴等细节,对身份的识别具有重要的应用价值。 一、准备工作 …

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论