環境
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: 取得したファイル名を使ってファイルの中身を読み出し
以下はファイルの内容を読み出して出力する例です。
同じく fs
の fs.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...of
と continue
を使って、欲しくないファイルをスキップするといいと思います。
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());
}
実行結果
渚の砂は、崩しても、積る、くぼめば、たまる、音もせぬ。
ただ美しい骨が出る。
貝の色は、日の紅、渚の雪、浪の緑。