Node檔案系統:fs非同步與同步(檔案讀寫)

2022-08-08 18:02:02

同步與非同步

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其它相關文章!