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/zh-hant/n/325572.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XDGRY的頭像XDGRY
上一篇 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

發表回復

登錄後才能評論