はじめに
皆さん。こんにちは! DreamHanksのエルムです。
今回はNode.jsのファイルシステムについて説明していきます。
前回の記事は[第5回] Node.js Webサーバです。
Node.jsには、物理的なファイルシステムにアクセスするためのfsモジュールが搭載されています。fsモジュールは、非同期または同期のファイルI/O操作をすべて担当します。
ここでは、fsモジュールを用いた一般的なI/O操作の例をご紹介します。
ファイルを読む方法
非同期に物理ファイルを読み込むには、fs.readFile()メソッドを使用します:
1 |
fs.readFile(fileName [,options], callback) |
パラメータの説明
- ファイル名: ファイルのフルパスと名前を文字列で指定します。
- オプション: オプションパラメータには、エンコーディングとフラグを含むオブジェクトまたは文字列を指定します。デフォルトのエンコーディングはutf8、デフォルトのフラグは “r “です。
- コールバック: 2つのパラメータ err と fd を持つ関数です。readFileの操作が完了すると、この関数が呼び出されます。
以下の例では、既存のTestFile.txtを非同期に読み込んでいます:
1 2 3 4 5 6 7 |
var fs = require('fs'); fs.readFile('TestFile.txt', function (err, data) { if (err) throw err; console.log(data); }); |
上記の例では、非同期にTestFile.txt(Windowsの場合)を読み込み、読み込み操作が完了したときにコールバック関数を実行しています。この読み取り操作は、エラーが発生するか、または正常に完了します。errパラメータには,エラー情報があればその情報が格納されます。dataパラメータには,指定されたファイルの内容が格納されています.
以下は、TextFile.txtのサンプルファイルです:
TextFile.txt:
1 |
これは、Node.jsのfsモジュールをテストするためのテストファイルです。 |
では、上記の例を実行して、以下のような結果をご覧ください:
1 2 |
C:\> node server.js これは、Node.jsのfsモジュールをテストするためのテストファイルです。 |
同期的にファイルを読み込むには、以下のようにfs.readFileSync()メソッドを使用します:
1 2 3 4 |
var fs = require('fs'); var data = fs.readFileSync('dummyfile.txt', 'utf8'); console.log(data); |
ファイルを書く方法
データをファイルに書き込むには、fs.writeFile()メソッドを使用する。ファイルが既に存在する場合は既存の内容を上書きし、そうでない場合は新しいファイルを作成してそこにデータを書き込みます。
1 |
fs.writeFile(filename, data[, options], callback) |
パラメータの説明
- ファイル名: ファイルのフルパスと名前を文字列で指定します。
- データ: ファイルに書き込む内容です。
- オプション: オプションには、エンコーディング、モード、フラグを含むオブジェクトまたは文字列を指定します。デフォルトのエンコーディングはutf8、デフォルトのフラグは “r “です。
- コールバック: 2つのパラメータ err と fd を持つ関数です。これは、書き込み操作が完了したときに呼び出されます。
次の例では、test.txtという新しいファイルを作成し、そこに「Hello DreamHanks」を非同期で書き込んでいます。
例: ファイルの作成と書き込み:
1 2 3 4 5 6 7 8 |
var fs = require('fs'); fs.writeFile('test.txt', 'Hello DreamHanks!', function (err) { if (err) console.log(err); else console.log('書き込みが完了しました。'); }); |
同様に、fs.appendFile()メソッドを使用して、既存のファイルに内容を追加します:
1 2 3 4 5 6 7 8 |
var fs = require('fs'); fs.appendFile('test.txt', 'Hello DreamHanks!', function (err) { if (err) console.log(err); else console.log('アペンドが完了しました。'); }); |
ファイルを開く方法
また、fs.open()メソッドを使用して、ファイルを読み書き可能な状態にすることもできます。
1 |
fs.open(path, flags[, mode], callback) |
パラメータの説明
- パス: ファイルの名前を文字列で表したフルパス。
- フラグ: 操作を行うためのフラグです。
- モード: 読み込みと書き込みのモードを指定します。デフォルトは 0666 readwrite です。
- コールバック: 2つのパラメータ err と fd を持つ関数です。これは、書き込み操作が完了したときに呼び出されます。
フラグ
次の表は、読み取り/書き込み操作で使用できるすべてのフラグの一覧です:
フラグ | 説明 |
---|---|
r | ファイルを読み込みのために開きます。ファイルが存在しない場合は例外が発生します。 |
r+ | ファイルを読み書き可能な状態にします。ファイルが存在しない場合は例外が発生します。 |
rs | ファイルを同期モードで読み込み用に開きます。 |
rs+ | ファイルを読み書き可能な状態で開き、OSに同期して開くように指示します。注意して使用することについては、「rs」の注記を参照してください。 |
w | ファイルを書き込み用に開く。ファイルが作成される(存在しない場合)、または切り捨てられる(存在する場合)。 |
wx | w と似ていますが、パスが存在すると失敗します。 |
w+ | ファイルを読み書き可能な状態にします。ファイルが作成される(存在しない場合)か、切り捨てられる(存在する場合)。 |
wx+ | w+ と似ていますが、パスが存在すると失敗します。 |
a | 追記用のファイルを開きます。ファイルが存在しない場合は作成されます。 |
ax | a と同じですが、パスが存在する場合は失敗します。 |
a+ | ファイルを開いて読み込んだり、追記したりします。ファイルが存在しない場合は作成されます。 |
ax+ | a+ と似ていますが、パスが存在すると失敗します。 |
次の例では、既存のファイルを開き、その内容を読み取ります:
例:ファイルを開く、読む:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
var fs = require('fs'); fs.open('TestFile.txt', 'r', function (err, fd) { if (err) { return console.error(err); } var buffr = new Buffer(1024); fs.read(fd, buffr, 0, buffr.length, 0, function (err, bytes) { if (err) throw err; // ジャンクを避けるために、読み取りバイトのみを印刷します。 if (bytes > 0) { console.log(buffr.slice(0, bytes).toString()); } // 開いているファイルを閉じます。 fs.close(fd, function (err) { if (err) throw err; }); }); }); |
ファイルを削除する方法
既存のファイルを削除するには、fs.unlink()メソッドを使用します。
1 |
fs.unlink(path, callback); |
以下の例では、既存のファイルを削除しています:
1 2 3 4 5 6 7 |
var fs = require('fs'); fs.unlink('test.txt', function () { console.log('書き込み操作が完了しました。'); }); |
fsモジュールの重要なメソッド
メソッド | 説明 |
---|---|
fs.readFile(fileName [,options], callback) | 既存のファイルを読みます。 |
fs.writeFile(filename, data[, options], callback) | ファイルへの書き込みを行います。ファイルが存在する場合は内容を上書きし、存在しない場合は新しいファイルを作成します。 |
fs.open(path, flags[, mode], callback) | ファイルを読み書きできるように開きます。 |
fs.rename(oldPath, newPath, callback) | 既存のファイルの名前を変更します。 |
fs.chown(path, uid, gid, callback) | 非同期のchownです。 |
fs.stat(path, callback) | ファイルの重要な統計情報を含む fs.stat オブジェクトを返します。 |
fs.link(srcpath, dstpath, callback) | ファイルを非同期にリンクします。 |
fs.symlink(destination, path[, type], callback) | Symlinkは非同期的に行われます。 |
fs.rmdir(path, callback) | 既存のディレクトリの名前を変更します。 |
fs.mkdir(path[, mode], callback) | 新しいディレクトリを作成します。 |
fs.readdir(path, callback) | 指定されたディレクトリの内容を読み取る。 |
fs.utimes(path, atime, mtime, callback) | ファイルのタイムスタンプを変更します。 |
fs.exists(path, callback) | 指定されたファイルが存在するかどうかを判定します。 |
fs.access(path[, mode], callback) | 指定されたファイルに対するユーザーのパーミッションをテストします。 |
fs.appendFile(file, data[, options], callback) | 既存のファイルに新しいコンテンツを追加します。 |
終わりに
今回の記事は以上になります。
ご覧いただきありがとうございます。
コメント