Node之文件的完整讀寫

文件的完整讀寫

文件的讀寫需要引入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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章