この記事はNode.jsでファイル一覧ではなく「ディレクトリ(フォルダ)一覧」を取る方法である。
※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類をなんとなく調べていて気づいたが、ファイルリスト取得を解説している記事は星の数ほどあるのだが、ディレクトリ一覧の取得方法を書いているサイトが殆どみあたらなかったため。
ディレクトリだけ取りたいケースはよくあると思うので参考になれば幸いだ。