fs(文件系統File System)
在Node中,與文件系統的交互是非常重要的,服務器的本質就將本地的文件發送給遠程的客戶端。文件系統簡單來說就是通過node來操作系統中的文件。
Node通過fs模塊來和文件系統進行交互。
該模塊提供了一些標准文件訪問API來打開、讀取、寫入文件,以及與其交互。
要使用fs模塊,首先需要對其進行加載,fs模塊是核心模塊,直接引入不需要下載:const fs = require("fs");
同步和異步調用
fs模塊中所有的操作都有兩種形式可供選擇:同步和異步。
同步文件系統會阻塞程序的執行,也就是除非操作完畢,否則不會向下執行代碼。
異步文件系統不會阻塞程序的執行,而是在操作完成時,通過回調函數將結果返回。
同步文件寫入
1,打開文件
fs.openSync(path,flags[, mode])
中括號([])闊起的內容表示可以有可以沒有
path:要打開的文件路徑
flags:打開文件要做的操作類型
r 只讀的
w 可寫的
mode 設置文件的操作權限,一般不傳
該方法會返回一個文件的描述符作為結果,我們可以通過該描述符來對文件進行各種操作。
文件描述符是操作系統打開文件后給你的數字,代表這個文件在操作系統中的對象。
2,向文件中寫入文件
fs.writeSync(fd, string[, position[, encoding]])
中括號([])闊起的內容表示可以有可以沒有
fd:文件的描述符,需要傳遞要寫入的文件的描述符
string:要寫入的內容
position:表示要寫入的起始位置。
encoding:寫入的編碼格式。
3,關閉打開的文件
fs.close(fd[, callback])
中括號([])闊起的內容表示可以有可以沒有
fd:要關閉的文件的描述符
如:
//1,引入文件模塊
let fs=require("fs");
//2,打開文件
let result=fs.openSync("test.txt","w");
//3,同步往文件寫入內容
fs.writeSync(result,"今天天氣真好",6);
//4,關閉文件,如果不關閉,打開的文件會一直在內存里運行,會造成資源浪費。
fs.closeSync(result);
異步文件寫入
1、打開文件
fs.open(path,flags[, mode],callback)
中括號([])闊起的內容表示可以有可以沒有
path:要打開的文件路徑
flags:打開文件要做的操作類型
r 只讀的
w 可寫的
mode 設置文件的操作權限,一般不傳
callback:回調函數。
異步調用的方法,結果都是通過回調函數的參數返回的。
回調函數callback的兩個參數:
第一個參數er:錯誤對象,如果沒有錯誤則返回null
第二個參數fd:文件的描述符
文件的狀態(flags):
r 讀取文件 , 文件不存在則出現異常
r+ 讀寫文件 , 文件不存在則出現異常
rs 在同步模式下打開文件用於讀取
rs+ 在同步模式下打開文件用於讀寫
w 打開文件用於寫操作 , 如果不存在則創建,如果存在則截斷
wx 打開文件用於寫操作, 如果存在則打開失敗
w+ 打開文件用於讀寫, 如果不存在則創建, 如果存在則截斷
wx+ 打開文件用於讀寫, 如果存在則打開失敗
a 打開文件用於追加, 如果不存在則創建
ax 打開文件用於追加, 如果路徑存在則失敗
a+ 打開文件進行讀取和追加, 如果不存在則創建該文件
ax+ 打開文件進行讀取和追加,如果路徑存在則失敗
2,向文件中寫入文件
fs.write(fd, string[, position[, encoding]],callback)
中括號([])闊起的內容表示可以有可以沒有
fd:文件的描述符,需要傳遞要寫入的文件的描述符
string:要寫入的內容
position:表示要寫入的起始位置。
encoding:寫入的編碼格式。
callback:回調函數。
3,關閉打開的文件
fs.close(fd[, callback])
中括號([])闊起的內容表示可以有可以沒有
fd:要關閉的文件的描述符
比如:
//1,引入文件模塊
let fs=require("fs");
//2,打開文件
fs.open("test.txt","w",function(error,fd){
if(!error){
//3,異步往文件寫入內容
fs.write(fd,"今天天氣真好",function(err){
if(!err){
console.log("寫入成功");
}
//關閉打開的文件
fs.close(fd,function(err2){
console.log("文件關閉");
});
});
}else{
console.log(error);
}
});