文件的完整讀寫
文件的讀寫需要引入node核心模塊fs
let fs=require('fs')
readFile(filename, [options], callback)異步讀取文件
fs.readFile(filename, [options], callback)
在readFile方法中,使用三個參數,其中filename參數與callback參數爲必須指定的參數,options參數爲可選參數。filename參數用於指定讀取文件的完整文件路徑及文件名,options參數值爲一個對象,在其中指定讀取文件時需要使用的選項,在該參數值對象中可以使用flag屬性指定對該文件採取什麼操作,默認值爲’r’(如果指定讀取的文件不存在,則拋出異常)
options配置文件中flag(權限)可選值如下
- ‘r’:讀取文件,如果文件不存在則拋出異常。
- ‘r+’:讀取並寫入文件,如果文件不存在則拋出異常。
- ‘rs’:以同步方式讀取文件並通知操作系統忽略本地文件系統緩存,如果文件不存在則拋出異常。由於該屬性值的使用將使操作系統忽略本地文件系統緩存機制,因此在操作網絡文件系統時建議使用該屬性值,但由於其對性能產生一定的負面影響,所以在其他場合下不建議使用。
- ‘w’:寫入文件。如果文件不存在則創建該文件,如果該文件已存在則清空文件內容。
- ‘wx’:作用與’w’類似,但是以排他方式寫入文件。
- ‘w+’:讀取並寫入文件。如果文件不存在則創建該文件,如果該文件已存在則清空文件內容。
- ‘wx+’:作用與’w+'類似,但是以排他方式打開文件。
- ‘a’:追加寫入文件,如果文件不存在則創建該文件。
- ‘ax’:作用與’a’類似,但是以排他方式寫入文件。
- ‘a+’:讀取並追加寫入文件,如果文件不存在則創建該文件。
- ‘ax+’:作用與’a+'類似,但是以排他方式打開文件。
在options參數值中,可使用encoding屬性指定使用何種編碼格式來讀取該文件,可指定屬性值爲“utf8”、“ascii”與“base64”。callback參數用於文件讀取完畢時執行的回調函數。
function (err, data) {
//
回調函數代碼略
}
Node中採用錯誤優先的方式
在回調函數中使用兩個參數,其中第一個參數值爲讀取文件操作失敗時觸發的錯誤對象,第二個參數值爲讀取到的文件內容。當在options參數值對象中使用encoding屬性指定編碼格式時,該參數值爲將文件內容根據指定編碼格式經過編碼後的字符串,當不指定options參數或在options參數值對象中不使用encoding屬性時,該參數值爲一個存放了文件中原始二進制內容的緩存區對象、
使用同步方式讀取文件readFileSync(fileName,[option]);
var data=fs.readFileSync(filename, [options])
使用異步方式寫入文件writeFile(filename,data,[options],callback);
- filename:文件名
- data:需要寫入的數據
- option:options參數值爲一個對象,參數如下
- flag屬性:用於指定對該文件採取何種操作,默認值爲’w’(文件不存在時創建該文件,文件已存在時重寫該文件),可指定值及其含義與readFile方法中使用的options參數值中的flag屬性的可指定值及其含義相同。
- mode屬性:用於指定當文件被打開時對該文件的讀寫權限,默認值爲0666(可讀寫)。該屬性值及fs模塊中的各方法中的mode參數值的指定方法均如下所示:使用4個數字組成mode屬性值或?mode參數值,其中第一個數字必須是0,第二個
數字用於規定文件或目錄所有者的權限,第三個數字用於規定文件或目錄所有者所屬用戶組的權限,第四個數字規定其他人的權限。可以設定的數字如下所示:- 1:執行權限
- 2:寫權限
- 4:讀權限
- encoding屬性:用於指定使用何種編碼格式來寫入該文件。可指定屬性值爲“utf8”、“ascii”與“base64”。當data參數值爲一個Buffer對象時該屬性值被忽略,使用默認編碼格式utf8來執行文件的寫入。
- callback:回調函數
fs.writeFile(filename,data,[options],callback)
使用同步方式寫入文件writeFileSync(filename,data,[options])
fs.writeFileSync(filename,data,[options]
使用異步方法追加內容到文件底部appendFile(filename,data,[options],callback)
fs.appendFile(filename,data,[options],callback)
使用同步方法追加內容到文件底部appendFileSync(filename,data,[options],callback)
fs.appendFileSync(filename,data,[options])
從指定位置處開始讀寫文件
如何實現從指定位置處開始讀寫文件的處理。要實現這一處理,我們首先需要使用fs模塊中的open方法或openSync方法打開文件。
異步打開文件open(filename, flags,[mode],callback)
fs.open(filename, flags,[mode],callback)
callback參數用於指定文件打開操作執行完畢時執行的回調函數
function (err, fd) {
//
回調函數代碼略
}
回調函數使用兩個參數,其中第一個參數值爲打開文件操作失敗時所觸發的錯誤對象,第二個參數值爲一個整數值,代表打開文件時返回的文件描述符(在Windows操作系統中,文件描述符亦稱文件句柄)。
同步打開文件openSync(filename, flags,[mode])
var fd=fs.openSync(filename, flags,[mode])
從文件的指定位置處讀取文件read(fd, buffer, offset, length, position, callback)
fs.read(fd, buffer, offset, length, position, callback)
- fd:必須爲open方法所使用的回調函數中返回的文件描述符或openSync方法返回的文件描述符;
- buffer:buffer參數值爲一個Buffer對象,用於指定將文件數據讀取到哪個緩存區中;
- offset:用於指定向緩存區中寫入數據時的開始寫入位置(以字節爲單位)
- length:用於指定從文件中讀取的字節數
- position:用於指定讀取文件時的開始位置(以字節爲單位)
- callback:該回調函數使用三個參數,其中err參數值爲讀取文件操作失敗時所觸發的錯誤對象;bytesRead參數值爲一個整數值,代表實際讀取的字節數(由於文件的開始讀取位置+指定讀取的字節數可能大於文件長度,指定讀取的字節數可能並不等於實際讀取到的字節數);buffer參數值爲被讀取的緩存區對象。
從文件的指定位置處同步讀取文件readSync(fd, buffer, offset, length, position)
參數與異步讀取一致
從文件的指定處開始寫入這些數據write(fd, buffer, offset, length, position, callback)
fs.write(fd, buffer, offset, length, position, callback)
callback函數使用三個參數,其中err參數值爲寫入文件操作失敗時所觸發的錯誤對象;written參數值爲一個整數值,代表被寫入的字節數;buffer參數值爲一個Buffer對象,代表被讀取的緩存區對象。
從文件的指定處開始寫入這些數據writeSync(fd, buffer, offset, length, position )
參數與異步讀取一致
關閉文件close(fd,[callback])
fs.close(fd,[callback])
同步關閉文件closeSync(fd)
fs.closeSync(fd)
將內存緩衝區中的剩餘數據全部寫入文件fsync(fd,[callback])
fs.fsync(fd,[callback])
將內存緩衝區中的剩餘數據同步全部寫入文件fsync(fd,[callback])
fs.fsyncSync(fd)