2021-12-22

【Node.js】fsでフォルダ(ディレクトリ)一覧を取得する方法【やたら簡単】

超絶簡単。ファイルではなくディレクトリ一覧を取る方法。

Article Image

ディレクトリ一覧を取得する方法

この記事はNode.jsでファイル一覧ではなく「ディレクトリ(フォルダ)一覧」を取る方法である。

使用するライブラリ

  • fs
  • path

ES6で書いている(拡張子mjs)

実装と実行結果の例

import * as fs from 'fs'
import * as path from 'path'

//mjsが入っているディレクトリを取得
const currentDir = process.cwd();

//ファイルとディレクトリのリストが格納される(配列)
const files = fs.readdirSync(currentDir)
console.log(files)

//ディレクトリのリストに絞る
const dirList = files.filter((file) => {
    return fs.statSync(path.join(currentDir, file)).isDirectory()
})
console.log(dirList)

まず先に「ファイルもフォルダもすべて表示」して、次に「フォルダだけ表示」するコードである。

実行結果

このBLOGの記事フォルダでこのコードを実行してみる。

[
  '1.md',  '10.md', '11.md',    '12.md', '13.md',
  '14.md', '15.md', '16.md',    '17.md', '18.md',
  '19.md', '2.md',  '20.md',    '21.md', '22.md',
  '23.md', '24.md', '25.md',    '26.md', '27.md',
  '28.md', '29.md', '3.md',     '30.md', '31.md',
  '32.md', '33.md', '34.md',    '35',    '36',
  '37',    '38',    '39',       '4.md',  '40',
  '41',    '42',    '43',       '44',    '45',
  '46',    '47',    '48',       '49',    '5.md',
  '50',    '51',    '52',       '53',    '54',
  '55',    '56',    '57',       '58',    '59',
  '6.md',  '60',    '61',       '7.md',  '8.md',
  '9.md',  'img',   'test.mjs'
]
[
  '35', '36', '37',  '38', '39',
  '40', '41', '42',  '43', '44',
  '45', '46', '47',  '48', '49',
  '50', '51', '52',  '53', '54',
  '55', '56', '57',  '58', '59',
  '60', '61', 'img'
]

上に表示されている配列が「ディレクトリもファイルも全て」

下に表示されている配列が「ディレクトリのみ」

ここでは拡張子がついているものがファイル。

数字だけのものがフォルダ。

解説

とてもシンプルでfs.readdirSyncでフォルダもファイルもまとめて取得する。

その後statSync()にてisDirectory()メソッドを使ってやると「フォルダならtrueそうでなければfalse」が帰る。

つまり.filterで最初に取得したファイルリストを回してやるだけでディレクトリ一覧が取れるという仕組みだ。

おまけ

isDirectory()メソッドの代わりにisFile()にすればファイル一覧となるのでこちらも覚えておきたい。

またisDirectory()を使わなくても

return !fs.statSync("パス").isFile()

のように頭に!で否定してやってもディレクトリ一覧が取れる。

なんでこんな簡単な記事を書いた?

fsを解説しているBLOG類をなんとなく調べていて気づいたが、ファイルリスト取得を解説している記事は星の数ほどあるのだが、ディレクトリ一覧の取得方法を書いているサイトが殆どみあたらなかったため。

ディレクトリだけ取りたいケースはよくあると思うので参考になれば幸いだ。


この記事のタグ

この記事をシェア


謎の技術研究部 (謎技研)