nodejs開発では、ファイルの読み取りと書き込みの問題が発生することがあります。ファイルを書き込むときに、ループ内でファイルにコンテンツを追加する必要があるというシナリオがあります。このとき、writeFile(パス、データ)またはwriteFileSyncを呼び出すと、 (パス、データ)、コンテンツをファイルに追加するのではなく、最後に書き込まれたコンテンツのみがファイルに追加されます。コンテンツをファイルに追加する場合は、appendFile(パス、データ)またはappendFileSync(パス、data)メソッド。
次の例を見てください。
var fs = require("fs")
var os = require("os");
var path = require("path");
function readFile(filePath){
fs.readFile(filePath,'utf-8',(err,data)=>{
if(err){
console.log(err);
return;
}
console.log(data);
})
}
var contents = ['hello nodejs.','今天是2020年2月27日。','中国面临新型冠状病毒肺炎疫情的困扰。','武汉加油。'];
function writeFile(filePath){
for(var i=0;i<contents.length;i++){
fs.writeFileSync(filePath,contents[i]+os.EOL);
//fs.appendFileSync(filePath,contents[i]+os.EOL);
}
}
writeFile("test2.txt");
/*
console.log(path.resolve('.'+path.sep));
console.log(__dirname)
console.log(process.cwd())
*/
readFile("test2.txt");
このコードを実行し、次のように情報を出力します。
ファイルのコンテンツを周期的に書き込むと、writeFileメソッドまたはwriteFileSyncメソッドを呼び出しているため、以前に書き込まれたコンテンツが上書きされることがわかります。appendFileまたはappendFileSyncに変更したら、生成されたファイルを削除し、プログラムを再実行して、印刷情報を表示します。
この例では、writeFileとappendFileの違いも確認できます。1つは置換に相当し、もう1つはファイルの最後に追加します。さらに、writeFileとappendFileのどちらでも、ファイルが存在しない場合は、エラーを報告する代わりに自動的に作成されます。
コンテンツをラップするために、コンテンツの各行に終了文字os.EOLを追加しました。
このように、ファイルでは、コンテンツもラップされていることがわかります。
また、ここには中国語がありますが、追加のエンコーディング方法が指定されておらず、中国語の文字化けの問題もありません。ここのjsファイルはNotepad ++で記述され、エンコーディングはUTF-8です。