Node.jsのfs.writeFile
とfs.writeFileSync
の使い方の例を分かりやすく簡単に説明していきます。fsはNode.jsでファイルを書き込むために使うライブラリです。
コマンドラインとnode.jsの環境の作り方
コマンドラインとnode.jsの環境の作り方については以下をご覧ください。
目次
fs.writeFileSyncの使い方
まずは使い方が分かりやすいfs.writeFileSync
から説明します。
最も簡単な使い方は次の通りです。
sample.js1 2 3 4 5
|
const fs = require('fs')
fs.writeFileSync( "output.txt" , "テキストファイルの中身" )
|
上記のサンプルコードではoutput.txt
というテキストファイルを、Node.jsから書き出しています。流れとしては次の通りです。
ライブラリを読み込む
まずはfs
というライブラリを読み込みます。今回はファイルの読み書きを行うことができるfsを読み込んでいます。
ファイルを書き込む
fs
ライブラリのメソッド(命令)であるfs.writeFileSync( 書き出すファイルパス , データ )
を使って、ファイルを書き込んでいます。
上記のコードを実行すると、書き出したファイルoutput.txt
には、テキストファイルの中身
という文字が保存されます。
コードの実行は以下のようなコマンドで実行する事ができます。
fs.writeFileの使い方
次にfs.writeFile
を使ってみましょう。fs.writeFile
は前項で説明したfs.writeFileSync
と同じようにファイルの書き込みができます。
最も単純な使い方は次の通りです。
sample.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
var fs = require('fs')
fs.writeFile( "output.txt" , "テキストファイルの中身2" , (err) => { if(err){ console.log("エラーが発生しました。" + err) throw err } else{ console.log("ファイルが正常に書き出しされました") } });
|
上記のサンプルコードでは、前項と同様にoutput.txt
というテキストファイルを、Node.jsから書き出しています。流れとしては次の通りです。
ライブラリを読み込む
まずはfs
というライブラリを読み込みます。今回はファイルの読み書きを行うことができるfsを読み込んでいます。
ファイルを書き込む
fs
ライブラリのメソッド(命令)であるfs.writeFile( 書き出すファイルパス , データ ,コールバック )
を使って、ファイルを書き込んでいます。
前項で説明したfs.writeFileSync
と大きく違うのは、書き出しの結果(失敗または成功)を受けて、処理を分けることができる所です。
fs.writeFile
はコールバックと言われる関数を用意する必要があるのですが、その関数でerr
という引数を受けることができます。err
には、
書き込みに問題が発生した時
エラーメッセージが入っています
書き込みが成功した時
内容はnull
(=空)です
上記のように、書き出しの結果に応じて内容が変化します。そこでif(err){ 〜
のような条件で、書き込みが成功したか失敗したかを判定することができるようになります。
同期と非同期
また、fs.writeFile()
は書き込みの結果を受けてから、コールバック関数で処理を行うことができるため非同期処理と呼ばれています。
それに対して、前項のfs.writeFileSync()
は、この処理が完了するまで以降の処理を止めるため同期処理と呼ばれています。
それでは、fs.writeFile()
とfs.writeFileSync()
を順番に記述していき、それぞれの最後にメッセージを表示させるコードを書いてみましょう。
sample.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
const fs = require('fs')
fs.writeFileSync( "output.txt" , "テキストファイルの中身" ) console.log("1つ目の書き出し処理が終わった")
fs.writeFile( "output.txt" , "テキストファイルの中身2" , (err) => { if(err){ console.log("エラーが発生しました。" + err) throw err } else{ console.log("ファイルが正常に書き出しされました") } }); console.log("2つ目の書き出し処理が終わった")
|
上記のコードを実行すると、2つ目の書き出し処理が終わった
というメッセージの後でファイルが正常に書き出しされました
というメッセージが表示されます。
bash1 2 3 4
| $ node sample.js 1つめの書き出し処理が終わった 2つめの書き出し処理が終わった ファイルが正常に書き出しされました
|
つまり、fs.writeFile
ではconsole.log("2つ目の書き出し処理が終わった")
が先に呼び出され、コールバック関数の中にあるconsole.log("ファイルが正常に書き出しされました")
が後から呼び出されるケースもあるので、注意が必要です。
行いたい処理に応じて使い分けしていきましょう。