TypeScriptでファイル読み書き
TypeScriptでNode.jsでテキストファイルを読み書きする
Node.js と TypeScript を組み合わせると、テキストファイルの読み書きが簡単になります。Node.jsは非同期入出力機能を提供し、TypeScriptは静的型付けでコードの信頼性を高めます。
ファイルを読み込む
- fsモジュールをインポートします。
import fs from 'fs/promises';
- readFileメソッドを使用してファイルを読み込みます。
const data = await fs.readFile('filename.txt', 'utf8');
filename.txt
: 読み込むファイルのパスutf8
: エンコーディング (他のエンコーディングも使用可能)
- writeFileメソッドを使用してファイルに書き込みます。
await fs.writeFile('newfile.txt', 'Hello, world!', 'utf8');
newfile.txt
: 書き込むファイルのパスHello, world!
: 書き込むデータutf8
: エンコーディング
例
import fs from 'fs/promises';
async function main() {
try {
const data = await fs.readFile('input.txt', 'utf8');
console.log('Read:', data);
await fs.writeFile('output.txt', data.toUpperCase(), 'utf8');
console.log('Written:', data.toUpperCase());
} catch (err) {
console.error('Error:', err);
}
}
main();
この例では、input.txt
ファイルを読み込み、その内容を大文字に変換して output.txt
に書き込みます。
注意
- ファイルのエンコーディングに注意してください。必要に応じて適切なエンコーディングを使用してください。
- エラー処理は重要です。
try...catch
ブロックを使用してエラーを適切に処理してください。 - ファイル操作は非同期なので、
await
キーワードを使用して結果を待たなければなりません。
TypeScriptでファイル読み書きの例
import fs from 'fs/promises';
async function readFromFile(filename: string) {
try {
const data = await fs.readFile(filename, 'utf8');
console.log(`Read from ${filename}: ${data}`);
} catch (err) {
console.error(`Error reading ${filename}:`, err);
}
}
readFromFile('input.txt');
このコードは、input.txt
ファイルを読み込み、その内容をコンソールに出力します。
import fs from 'fs/promises';
async function writeToFile(filename: string, data: string) {
try {
await fs.writeFile(filename, data, 'utf8');
console.log(`Written to ${filename}: ${data}`);
} catch (err) {
console.error(`Error writing to ${filename}:`, err);
}
}
writeToFile('output.txt', 'Hello, world!');
このコードは、output.txt
ファイルに "Hello, world!" という文字列を書き込みます。
ファイルを読み込んで書き込む
import fs from 'fs/promises';
async function copyFile(sourceFilename: string, destinationFilename: string) {
try {
const data = await fs.readFile(sourceFilename, 'utf8');
await fs.writeFile(destinationFilename, data, 'utf8');
console.log(`Copied ${sourceFilename} to ${destinationFilename}`);
} catch (err) {
console.error(`Error copying ${sourceFilename} to ${destinationFilename}:`, err);
}
}
copyFile('input.txt', 'output.txt');
このコードは、input.txt
ファイルの内容を output.txt
ファイルにコピーします。
fs.readFile
とfs.writeFile
は非同期関数なので、await
キーワードを使用して結果を待たなければなりません。
fs.readFileSync と fs.writeFileSync を使用
同期的なファイル読み書きを行う場合は、fs.readFileSync
と fs.writeFileSync
を使用できます。
import fs from 'fs';
const data = fs.readFileSync('input.txt', 'utf8');
console.log('Read:', data);
fs.writeFileSync('output.txt', data.toUpperCase(), 'utf8');
console.log('Written:', data.toUpperCase());
注意
同期的なファイル操作はブロッキングするため、大規模なファイルや多くのファイル操作を行う場合は非同期メソッドの方が適しています。
Stream を使用
大規模なファイルやストリーミング処理が必要な場合は、fs.createReadStream
と fs.createWriteStream
を使用してストリームを作成し、データの読み書きを行います。
import fs from 'fs';
const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt');
readStream.on('data', (chunk) => {
writeStream.write( chunk.toString().toUpperCase());
});
readStream.on('end', () => {
writeStream.end();
});
Promise-based ライブラリ を使用
fs
モジュールは非同期操作をサポートしていますが、より簡潔なコードを書くために、Promise-based のライブラリを使用することもできます。例えば、fs-extra
ライブラリは fs
モジュールの拡張機能を提供し、Promise-based のメソッドを提供しています。
import fs from 'fs-extra';
async function main() {
const data = await fs.readFile('input.txt', 'utf8');
console.log('Read:', data);
await fs.writeFile('output.txt', data.toUpperCase(), 'utf8');
console.log('Written:', data.toUpperCase());
}
main();
選択基準
- コードの簡潔さ
Promise-based ライブラリを使用すると、コードがより簡潔になることがあります。 - ファイルサイズ
大規模なファイルの場合は、ストリームを使用するのが効率的です。
node.js typescript