Node.js + TypeScriptで基本的なファイル操作を紹介

2024年4月22日月曜日

javascript

t f B! P L

Node.jsとTypeScriptを使用してファイルシステムの操作を行う方法を紹介します。
この記事では、以下のファイル操作を紹介しています。

  1. 指定されたフォルダパスのファイル一覧取得
  2. ファイルの存在チェック
  3. ディレクトリの存在チェック
  4. ファイルの削除
  5. ファイルの移動
  6. ファイル名の変更
  7. 新規テキストファイルの作成

また、それぞれのファイル操作に対し、非同期版と同期版のサンプルコードで解説します。

1. ファイル一覧の取得

ディレクトリ内のファイル一覧を取得する方法です。

非同期版:

import fs from 'fs';
import path from 'path';

function listFilesAsync(directoryPath: string): void {
    fs.readdir(directoryPath, (err, files) => {
        if (err) {
            console.error('Error fetching files:', err);
            return;
        }
        console.log('Files:', files);
    });
}

const myPath = path.join(__dirname, '/example/directory');
listFilesAsync(myPath);

同期版:

function listFilesSync(directoryPath: string): void {
    try {
        const files = fs.readdirSync(directoryPath);
        console.log('Files:', files);
    } catch (err) {
        console.error('Error fetching files:', err);
    }
}

listFilesSync(myPath);

2. ファイルの存在チェック

ファイルやディレクトリが存在するかどうかを確認する方法です。

同期版のみ (fs.existsSync):

function checkExistsSync(path: string): void {
    const exists = fs.existsSync(path);
    console.log(`${path} exists: ${exists}`);
}

checkExistsSync(path.join(myPath, 'file.txt'));

3. ファイルの削除

ファイルを削除する方法を示します。

非同期版:

function deleteFileAsync(filePath: string): void {
    fs.unlink(filePath, err => {
        if (err) {
            console.error('Failed to delete file:', err);
            return;
        }
        console.log(`${filePath} was deleted.`);
    });
}

deleteFileAsync(path.join(myPath, 'delete-me.txt'));

同期版:

function deleteFileSync(filePath: string): void {
    try {
        fs.unlinkSync(filePath);
        console.log(`${filePath} was deleted.`);
    } catch (err) {
        console.error('Failed to delete file:', err);
    }
}

deleteFileSync(path.join(myPath, 'delete-me.txt'));

4. ファイルの移動と名前の変更

ファイルを移動するか名前を変更する方法です。

非同期版:

function moveFileAsync(oldPath: string, newPath: string): void {
    fs.rename(oldPath, newPath, err => {
        if (err) {
            console.error('Error moving file:', err);
            return;
        }
        console.log(`File moved from ${oldPath} to ${newPath}`);
    });
}

moveFileAsync(path.join(myPath, 'old-name.txt'), path.join(myPath, 'new-name.txt'));

同期版:

function moveFileSync(oldPath: string, newPath: string): void {
    try {
        fs.renameSync(oldPath, newPath);
        console.log(`File moved from ${oldPath} to ${newPath}`);
    } catch (err) {
        console.error('Error moving file:', err);
    }
}

moveFileSync(path.join(myPath, 'old-name.txt'), path.join(myPath, 'new-name.txt'));

5. 新規テキストファイルの作成

新しいテキストファイルを作成する方法です。

非同期版:

function createFileAsync(filePath: string, content: string): void {
    fs.writeFile(filePath, content, err => {
        if (err) {
            console.error('Failed to create file:', err);
            return;
        }
        console.log(`${filePath} was created with content: ${content}`);


    });
}

createFileAsync(path.join(myPath, 'new-file.txt'), 'Hello, this is a new file!');

同期版:

function createFileSync(filePath: string, content: string): void {
    try {
        fs.writeFileSync(filePath, content);
        console.log(`${filePath} was created with content: ${content}`);
    } catch (err) {
        console.error('Failed to create file:', err);
    }
}

createFileSync(path.join(myPath, 'new-file.txt'), 'Hello, this is a new file!');

まとめ

これらのサンプルコードを基にして、Node.jsとTypeScriptで効率的なファイル操作を行うことができます。非同期版と同期版の使い分けを理解し、プロジェクトに適した方法を選んでください。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ