fs中 帶Sync的就是同步方式 不帶的就是非同步
在這先對同步和非同步進行區別
同步:前面的程式碼先執行 後面的程式碼需要等待前面的程式碼執行完畢才會執行
非同步:程式碼的執行不分先後 也就是說前面的程式碼執行 不會導致後面的程式碼阻塞 所以非同步程式碼的執行結果的順序是不一定的
在fs中對於檔案的操作有非同步和同步兩種方式,非同步中又分為普通非同步和Promise非同步兩種 具體看程式碼
options中的flag的取值及含義
r: 讀取檔案,檔案不存在則報錯 r+:讀取並寫入檔案,如果檔案不存在則報錯 rs:以同步的方式讀取檔案並通知操作系忽略本地檔案系統快取。(一般不用) w:寫入檔案。如果檔案不存在則建立該檔案,如果檔案存在則覆蓋 wx:作用和w類似,如果路徑已存在則失敗。 w+:讀取並寫入檔案。如果檔案不存在則建立該檔案,如果檔案存在則覆蓋 wx+:和w+型別,如果路徑已存在則失敗。 a:追加寫入檔案,如果檔案不存在則建立檔案 ax:作用和a型別,如果路徑已存在則失敗。 a+: 讀取並追加寫入檔案,如果檔案不存在則建立檔案 ax+:作用和a+類似,如果路徑已存在則失敗。
let fs=require('fs');
一. 讀取檔案
1.readFileSync(path[, options]) 同步讀取檔案
path: 檔案路徑
options:可選引數 用於設定 讀取檔案的options都一樣
// 同步讀取 需要使用一個變數來接收讀取出來的資料 let data=fs.readFileSync(path,{ // path為檔案的路徑 encoding:'utf8', // 指定字元集 flag:'r' // 指定讀取的模式 具體上面有 }); console.log(data.toString()); // 預設讀出來的是buffer型別 使用toString()轉為字串
2. readFile(path,[,options],callback(error,data)) 普通非同步去讀檔案
// 普通非同步讀取不需要變數 直接在回撥函數中讀取資料 需要注意的是: // 回撥函數接收兩個引數 第一個是error 也就是異常 說明檔案讀取失敗 如果error為null 則讀取成功 data即資料 fs.readFile(path,{encoding:'utf8',flag:'r'},function(error,data){ console.log(data.toString()) });
3. fs.promises.readFile(path[, options]) promise方式讀取檔案
// fs.promises.xxx 返回的是一個promise的物件 需要學習promise的語法 then()接收一個引數data 即資料 fs.promises.readFile(path).then(data=>{ console.log(data.toString()); }) // 或 let fsPromise=fs.promises.readFile(path); fsPromise.then(data=>{ console.log(data.toString()); })
二. 寫入檔案
appendFile效果和writeFile中flag:'a+'一樣
path:檔案路徑 data為寫入的資料 option同上
1. fs.writeFileSync(file, data[, options]) 同步寫入檔案
// data為需要寫入的資料 options同上 寫入的方式 a+為追加寫入方式 fs.writeFileSync(path,data,{flag:'a+'}); // 返回值為undefined
2. fs.appendFileSync(file, data[, options]) 同步追加方式寫入檔案
fs.appendFileSync(path,data,{}); // 返回值為undefined
3. fs.writeFile(file, data[, options],callback) 普通非同步寫入
fs.writeFile(path,data,{flag:'a+'},function(error){ if(err){ console.log("寫入失敗"); }else{ console.log("寫入成功"); }})
4. fs.promises.writeFile(file, data[, options]) promise非同步方式寫入
fs.promises.writeFile(path,data,{flag:'a+'}); // 寫入操作 沒有返回值 也就不需要then了
5. fs.appendFile(path, data[, options], callback) 非同步追加方式寫入檔案
fs.appendFile(path,appendData,function(){ })
6. fs.promises.appendFile(path, data[, options]) promise方式追加寫入檔案
fs.promises.writeFile(path,data);
【推薦:】
以上就是Node檔案系統:fs非同步與同步(檔案讀寫)的詳細內容,更多請關注TW511.COM其它相關文章!