6-2 Node.jsファイルモジュール

3922 ワード

Node.js内蔵のfsモジュールはファイルシステムモジュールで、ファイルの読み書きを担当しています.
他のすべてのJavaScriptモジュールとは異なり、fsモジュールは非同期の方法を同時に提供している.
非同期的な方法とは何かを振り返ってみましょう.
  • JavaScriptのシングルスレッドモデルのため、IO操作を行う場合、JavaScriptコードは待つ必要がなく、コールバック関数に着信した後、後続のJavaScriptコードを実行し続ける.
  • //      json   
    $.getJSON('http://example.com/ajax', function (data) { console.log('IO       ...');});
    console.log('   IO          ...');
    
  • で同期されたIO動作は、リターン待ち関数が必要である.//ネットワークの消費時間に応じて、関数は数十ミリ秒から数秒まで実行される.
    //      json   
    var data = getJSONSync('http://example.com/ajax');
    
    同期動作の利点は、コードが簡単で、プログラムがIO操作を待つことであり、待ち時間内に他のイベントに応答できないことである.非同期読み出しはIO操作を待つ必要はないが、コードが面倒である.
    非同期ファイル
    非同期読取ファイルは、fsモジュールにおけるreadFile方法を使用する.
    マニュアルの住所https://nodejs.org/api/fs.html#fs_fs_readfile_file_optionscalback
    少なくとも二つのパラメータが入ってきます.
  • ファイルパス
  • コールバック方法
  • まずsample.txtテキストを作成します.内容は以下の通りです.
           ,       。
           ,       。
    
    リードスクリプトを作成するfs.js
    //           
    const FS = require('fs');
    
    //     
    FS.readFile('sample.txt', 'utf-8', function (err, data) {
        console.log("
    ======
    "); // if (err) { console.log(err); // } else { console.log(data.toString()); } console.log("
    "); }); // ,err null,data String。 // ,err data // ,err ,data undefined。 // Node.js : , 。 。
    ファイルを同期します
    標準的な非同期読取モードに加えて、fsも対応する同期読取関数を提供する.同期読み出しの関数は非同期関数と比較してSync拡張子が一つ多くなり、コールバック関数を受信せずに、関数は直接結果を返します.
    ケース
    var fs = require('fs');var data = fs.readFileSync('sample.txt', 'utf-8');
    console.log(data);
    
    非同期でファイルを書く
    データをファイルに書き込むのはfs.writeFile()で実現します.
    文書の住所https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_optionscalback
    var fs = require('fs');
    var data = 'Hello, Node.js';
    fs.writeFile('output.txt', data, function(err) {
        if (err) {
            console.log(err);
        } else {
            console.log('ok.');
        }
    });
    
  • writeFile()のパラメータは、ファイル名、データ、およびコールバック関数の順である.
  • 入力されたデータがStringであれば、デフォルトではUTF-8で符号化されてテキストファイルに書き込まれ、着信パラメータがBufferであればバイナリファイルに書き込まれる.
  • コールバック関数は成功かどうかだけに関心があるので、一つのerrパラメータだけが必要です.
  • ファイルを同期して書きます
    同期書込みファイルはfs.writeFileSync()により実現されます.
    文書の住所https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options
    var fs = require('fs');
    var data = 'Hello, Node.js';
    fs.writeFileSync('output.txt', data);
    
    ファイル情報statを取得する
    ファイルサイズ、作成時間などの情報を得るためには、fs.stat()を使って、Statオブジェクトに戻ります.ファイルやディレクトリの詳細を教えてください.
    var fs = require('fs');
    
    fs.stat('sample.txt', function(err, stat) {
        if (err) {
            console.log(err);
        } else {
            //      :
            console.log('isFile: ' + stat.isFile());
    
            //      :
            console.log('isDirectory: ' + stat.isDirectory());
           
            //             
            if (stat.isFile()) {
                //     :
                console.log('size: ' + stat.size);
    
                //     , Date  :
                console.log('birth time: ' + stat.birthtime);
    
                //     , Date  :
                console.log('modified time: ' + stat.mtime);
            }
        }
    });
    
    statにも同期の関数statSyncがあります.
    var fs = require('fs');
    var data = fs.statSync('sample.txt');
    console.log(data);
    
    非同期
    fsモジュールにおいて、同期方法を提供するのは、使用を容易にするためである.私達は一体非同期の方法を使うべきですか?それとも同期の方法を使うべきですか?
    Node環境で実行されるJavaScriptコードはサーバーエンドコードであるため、ほとんどはサーバの運行期間において業務ロジックのコードを繰り返し実行する必要があり、非同期コードを使用しなければならない.
    サーバー起動時に設定ファイルを読み込む必要がある場合や、終了時にステータスファイルに書き込む必要がある場合は、同期コードを使用することができます.これらのコードは起動時と終了時に一回だけ実行され、サーバの正常な動作に影響を与えないためです.