フロントエンドの子供たちは皆、JavaScript にはディスク ファイルを操作する権限がないことを知っていますが、サーバーの子供たちは常にそれを軽蔑してきました。しかし、nodejs は私たちのフロントエンドを誇りに思っていると言えます。私は最近、node を勉強していますが、その強力な機能は人々をとても興奮させます。今日はファイルの読み取りと書き込みの仕組みを学びました。
まず、nodejs に付属する fs モジュールを導入する必要があります。
var fs=require("fs");
詳細については、Nodejs API を参照してください: http://www.w3cfuns.com/tools.php?mod=booknodejs
使用される主な方法は 2 つあります:
1. fs.readFile(ファイル名, [エンコーディング], [コールバック])
これはファイルの非同期読み取りです。filename はファイル パス、encoding はエンコード形式、callback はコールバック関数です。
ファイルのすべての内容を非同期的に読み取ります。例は次のとおりです:
fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; console.log(data); });
ここではローカル テスト ファイルを使用しています:
function readFile(){ console.log('--------开始读取文件--------'); var fs = require('fs'); fs.readFile('test.txt', 'utf-8', function(err, data) { if (err) { console.log("读取失败"); } else { console.log(data); return data; } }); console.log('--------读取结束--------'); }
2. fs.writeFile(ファイル名, データ, エンコーディング='utf8', [コールバック])
ファイルの書き込み:
function writeFile(data){ fs.writeFile("test2.txt",data,function(error){ if(error){ throw error; }else{ console.log("文件已保存"); } }); }
エラー コード: copyFile.js ファイル
var fs=require("fs"); function readFile(){ console.log('--------开始读取文件--------'); var fs = require('fs'); fs.readFile('test.txt', 'utf-8', function(err, data) { if (err) { console.log("读取失败"); } else { console.log(data); return data; } }); console.log('--------读取结束--------'); } function writeFile(data){ fs.writeFile("test2.txt",data,function(error){ if(error){ throw error; }else{ console.log("文件已保存"); } }); } function copyFile(){ var txt=readFile(); writeFile(txt); } copyFile();
ターミナルでノード copyFile.js を実行した結果は次のとおりです:
注:
1. ファイルのエンコード。最初はローカルで新しい txt ドキュメントを作成しましたが、それをエディタで開くと、結果は常に文字化けしていました。次に、encoding を使用するのが最善です。そうでない場合は、バッファに従って読み込まれます。
2. 同期実行の問題。
上記のコードには問題があり、ファイルの読み取りと書き込みのメソッドを別々に記述しました。本来は test.txt ファイルの内容を test2.txt にコピーするつもりでしたが、ファイルの読み取りは非同期で実行されます。つまり、いつ実行されるかは誰にも分からないため、test.txt の結果は未定義になります。
正しい方法は、読み取り後にファイルを書き込むことです:
var fs=require("fs"); function copyFile(){ console.log('--------开始读取文件--------'); var fs = require('fs'); fs.readFile('test.txt', 'utf-8', function(err, data) { if (err) { console.log("读取失败"); } else { writeFile(data) return data; } }); console.log('--------读取结束--------'); } function writeFile(data){ console.log(data); fs.writeFile("test2.txt",data,'utf8',function(error){ if(error){ throw error; }else{ console.log("文件已保存"); } }); } copyFile();
以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。