????Node.js中的fs模塊與文件系統(tǒng)操作相關(guān),主要用于實現(xiàn)文件系統(tǒng)的操作。fs模塊中提供了大量與文件系統(tǒng)相關(guān)的操作方法,這些方法分為同步方法和異步方法,開發(fā)人員可以根據(jù)實際需要進行選擇,從而對文件系統(tǒng)進行操作。
一、fs模塊的同步方法和異步方法
????fs模塊中提供了很多與文件操作相關(guān)的方法,例如目錄創(chuàng)建,文件創(chuàng)建,文件內(nèi)容的寫入與刪除等操作。這些與文件操作相關(guān)的方法在對文件系統(tǒng)進行操作時大多都有同步與異步這兩種方式。
????在這些方法中以Sync為后綴的方法都是同步方法,同步方法在執(zhí)行時需要立即返回操作結(jié)果,一個同步方法在操作結(jié)束之前不可以執(zhí)行之后的方法。不以Sync作為后綴的方法都是異步的操作方法,異步方法的特點是不會阻塞程序的執(zhí)行,異步方法的執(zhí)行結(jié)果是作為回調(diào)函數(shù)的參數(shù)進行返回的。在使用異步方法進行文件操作的時候,并不能保證方法執(zhí)行結(jié)果返回的順序,因為每一個異步方法進行文件操作時需要的時間長短是不完全相同的,時間較短的操作方法會先返回操作結(jié)果,耗時長的異步方法后返回結(jié)果。
二、對文件的讀寫操作
- readFile()方法和readFileSync()方法:
????readFile()方法用于對文件以異步的方式進行讀操作,readFile()方法用于對文件以同步的方式進行讀操作。程序示例:
(1)創(chuàng)建readFile.txt文本文件作為異步方法讀取內(nèi)容的文件:
使用異步的方法讀取文件內(nèi)容。
????(2)創(chuàng)建readFileSync.txt文本文件作為同步方法讀取內(nèi)容的文件:
使用同步的方法讀取文件內(nèi)容。
????(3)創(chuàng)建app.js:
var fs = require("fs"); //加載fs模塊
/*
*使用異步的方式讀取文件內(nèi)容
*/
fs.readFile('./readFile.txt', function(err, data){
//如果讀取文件過程中發(fā)生錯誤則將錯誤信息輸出
if(err){
console.log(err);
}else{
console.log(data.toString()); //使用toString()方法將讀取到的內(nèi)容轉(zhuǎn)換成字符串并輸出
}
});
/*
*使用同步的方式讀取文件內(nèi)容
*/
try{
var content = fs.readFileSync('./readFileSync.txt');
console.log(content.toString()); //使用toString()方法將讀取到的內(nèi)容轉(zhuǎn)換成字符串并輸出
}catch(e){
console.log('讀取文件內(nèi)容時發(fā)生錯誤:' + e);
}
????程序運行截圖:
????異步讀取文件內(nèi)容的readFile()方法可以接收三個參數(shù):
readFile(filename, [options], callback);
- filename:必選參數(shù),表示被讀取的文件的完整路徑以及文件名稱。
- options:可選參數(shù),表示讀取文件時需要使用的選項:
| options選項 | 描述 |
|---|---|
| ‘r’ | 讀取文件。 |
| ‘r+’ | 讀取并寫入文件。 |
| ‘rs’ | 以同步方式讀取文件并且忽略本地文件系統(tǒng)緩存。 |
| ‘w’ | 寫入文件,如果文件不存在就創(chuàng)建文件。 |
| ‘wx’ | 以排他的方式寫入文件。 |
| ‘w+’ | 讀取并寫入文件。 |
| ‘wx+’ | 讀取并寫入文件,是以排他的方式打開文件。 |
| ‘a(chǎn)’ | 追加寫入文件,如果文件不存在就創(chuàng)建文件。 |
| ‘a(chǎn)x’ | 追加并寫入文件,以排他的方式打開文件。 |
| ‘a(chǎn)+’ | 讀取并追加文件,如果文件不存在就創(chuàng)建文件。 |
- callback:必選參數(shù),表示文件讀取完成之后返回數(shù)據(jù)的回調(diào)函數(shù)。程序示例:
function(err, data){
//回調(diào)函數(shù)體
}
- writeFile()方法和writeFileSync()方法
????writeFile()方法和writeFileSync()方法都可以向指定的文件中寫入文件內(nèi)容。程序示例:
var fs = require("fs");
/*
*以異步的方式向文件中寫入內(nèi)容
*/
var string = "通過異步方式寫入文件的內(nèi)容";
fs.writeFile('./writeFile.txt', string, function(err){
if(err){
console.log('向文件中寫入內(nèi)容時發(fā)生錯誤:' + err);
}else{
console.log('向文件中寫入內(nèi)容成功。');
}
});
????程序運行截圖:
fs.writeFile(filename, data, [options], callback);
????writeFile()方法中可以接受以下四個參數(shù):
- filename:必選參數(shù),表示被寫入內(nèi)容的文件,包括文件的完整路徑以及文件名稱。
- data:必選參數(shù),表示被寫入文件的內(nèi)容,該參數(shù)可以是字符串也可以是Buffer示例對象的緩存區(qū)中的內(nèi)容。
- options:可選參數(shù),該參數(shù)是一個對象,用于指定在寫入文件時需要使用的選項。該對象包括的屬性有flag屬性,mode屬性,encoding屬性。flag屬性表示對該文件執(zhí)行何種操作,flag支持的選項有:
| flag選項 | 說明 |
|---|---|
| ‘r’ | 讀取文件。 |
| ‘r+’ | 讀取并寫入文件。 |
| ‘rs’ | 以同步方式讀取文件并且忽略本地文件系統(tǒng)緩存。 |
| ‘w’ | 寫入文件,如果文件不存在就創(chuàng)建文件。 |
| ‘wx’ | 以排他的方式寫入文件。 |
| ‘w+’ | 讀取并寫入文件。 |
| ‘wx+’ | 讀取并寫入文件,是以排他的方式打開文件。 |
| ‘a(chǎn)’ | 追加寫入文件,如果文件不存在就創(chuàng)建文件。 |
| ‘a(chǎn)x’ | 追加并寫入文件,以排他的方式打開文件。 |
| ‘a(chǎn)+’ | 讀取并追加文件,如果文件不存在就創(chuàng)建文件。 |
????mode屬性可以用于指定該文件被打開時的讀寫權(quán)限,默認值為066(可讀可寫)。該屬性值是用一個3位數(shù)字表示文件或目錄所有者、所屬組以及其他人的讀寫權(quán)限。1表示可執(zhí)行權(quán)限,2表示可寫權(quán)限,4表示可讀權(quán)限。
????encoding屬性可以用于指定以何種字符編碼方式將內(nèi)容寫入到文件中。默認的編碼方式是“utf8”,也可以改成“base64”、“ascii”或者其他的字符編碼方式。