LoginSignup
0
2

Node.js の fs でフォルダ内の内容を列挙する

Last updated at Posted at 2024-05-15

環境

bun 1.1.3

方法

fs.readdirSync() を使います。

コード例

ファイル構成

|--files
| |--fuga.txt
| |--hoge.txt
| |--piyo.txt
|--index.ts
fuga.txt
渚の砂は、崩しても、積る、くぼめば、たまる、音もせぬ。
hoge.txt
ただ美しい骨が出る。
piyo.txt
貝の色は、日の紅、渚の雪、浪の緑。

例1: シンプルにファイル名のリストを取得

fs.readdirSync() はディレクトリ内のファイル名のリストを返します。
厳密にはファイルだけでなくディレクトリもリストに含まれます。
ここでは .forEach() で全件ループしています。

index.ts
import fs from 'fs';

const dirPath = 'files';
const fileNames = fs.readdirSync(dirPath);

fileNames.forEach((fileName) => console.log(fileName));

実行結果

fuga.txt
hoge.txt
piyo.txt

例2: 取得したファイル名を使ってファイルの中身を読み出し

以下はファイルの内容を読み出して出力する例です。
同じく fsfs.readFileSync() を使っています。

index.ts
import fs from 'fs';

const dirPath = 'files';
const fileNames = fs.readdirSync(dirPath);

fileNames.forEach(fileName => {
  const file = fs.readFileSync([dirPath, fileName].join('/'), 'utf8');
  console.log(file.trim());
});

実行結果

渚の砂は、崩しても、積る、くぼめば、たまる、音もせぬ。
ただ美しい骨が出る。
貝の色は、日の紅、渚の雪、浪の緑。

例3: ファイル名でファイルをフィルターして中身を読み出し

以下は拡張子を検査することで、テキストファイルだけを取り出す例です。
今回のファイル構成では実行結果は例2と変わりませんが、ファイル名を拡張子なり正規表現なりでフィルターして取り出したい場合や、当該ディレクトリ内に別のディレクトリが存在する場合は、以下のように for...ofcontinue を使って、欲しくないファイルをスキップするといいと思います。

index.ts
import fs from 'fs';

const dirPath = 'files';
const fileNames = fs.readdirSync(dirPath);

for (const fileName of fileNames) {
  if (!fileName.endsWith('.txt')) continue;

  const file = fs.readFileSync([dirPath, fileName].join('/'), 'utf8');
  console.log(file.trim());
}

実行結果

渚の砂は、崩しても、積る、くぼめば、たまる、音もせぬ。
ただ美しい骨が出る。
貝の色は、日の紅、渚の雪、浪の緑。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2