node里的filesystem模塊文件讀寫操作詳解
一、是什么
fs(filesystem),該模塊提供本地文件的讀寫能力,基本上是POSIX
文件操作命令的簡單包裝
可以說,所有與文件的操作都是通過fs
核心模塊實現(xiàn)
導入模塊如下:
const fs = require('fs');
這個模塊對所有文件系統(tǒng)操作提供異步(不具有sync
后綴)和同步(具有 sync
后綴)兩種操作方式,而供開發(fā)者選擇
二、文件知識
在計算機中有關于文件的知識:
- 權限位 mode
- 標識位 flag
- 文件描述為 fd
權限位 mode
針對文件所有者、文件所屬組、其他用戶進行權限分配,其中類型又分成讀、寫和執(zhí)行,具備權限位4、2、1,不具備權限為0
如在linux
查看文件權限位:
drwxr-xr-x?1?PandaShen?197121?0?Jun 28 14:41?core -rw-r--r--?1?PandaShen?197121?293?Jun 23 17:44?index.md
在開頭前十位中,d
為文件夾,-
為文件,后九位就代表當前用戶、用戶所屬組和其他用戶的權限位,按每三位劃分,分別代表讀(r)、寫(w)和執(zhí)行(x),- 代表沒有當前位對應的權限
標識位
標識位代表著對文件的操作方式,如可讀、可寫、即可讀又可寫等等,如下表所示:
符號 | 含義 |
---|---|
r | 讀取文件,如果文件不存在則拋出異常。 |
r+ | 讀取并寫入文件,如果文件不存在則拋出異常。 |
rs | 讀取并寫入文件,指示操作系統(tǒng)繞開本地文件系統(tǒng)緩存。 |
w | 寫入文件,文件不存在會被創(chuàng)建,存在則清空后寫入。 |
wx | 寫入文件,排它方式打開。 |
w+ | 讀取并寫入文件,文件不存在則創(chuàng)建文件,存在則清空后寫入。 |
wx+ | 和 w+ 類似,排他方式打開。 |
a | 追加寫入,文件不存在則創(chuàng)建文件。 |
ax | 與 a 類似,排他方式打開。 |
a+ | 讀取并追加寫入,不存在則創(chuàng)建。 |
ax+ | 與 a+ 類似,排他方式打開。 |
文件描述為 fd
操作系統(tǒng)會為每個打開的文件分配一個名為文件描述符的數(shù)值標識,文件操作使用這些文件描述符來識別與追蹤每個特定的文件
Window
系統(tǒng)使用了一個不同但概念類似的機制來追蹤資源,為方便用戶,NodeJS
抽象了不同操作系統(tǒng)間的差異,為所有打開的文件分配了數(shù)值的文件描述符
在 NodeJS
中,每操作一個文件,文件描述符是遞增的,文件描述符一般從 3
開始,因為前面有 0
、1
、2
三個比較特殊的描述符,分別代表 process.stdin
(標準輸入)、process.stdout
(標準輸出)和 process.stderr
(錯誤輸出)
三、方法
下面針對fs
模塊常用的方法進行展開:
- 文件讀取
- 文件寫入
- 文件追加寫入
- 文件拷貝
- 創(chuàng)建目錄
文件讀取
fs.readFileSync
同步讀取,參數(shù)如下:
- 第一個參數(shù)為讀取文件的路徑或文件描述符
- 第二個參數(shù)為 options,默認值為 null,其中有 encoding(編碼,默認為 null)和 flag(標識位,默認為 r),也可直接傳入 encoding
結果為返回文件的內(nèi)容
const fs = require("fs"); let buf = fs.readFileSync("1.txt"); let data = fs.readFileSync("1.txt", "utf8"); console.log(buf); // <Buffer 48 65 6c 6c 6f> console.log(data); // Hello
fs.readFile
異步讀取方法 readFile
與 readFileSync
的前兩個參數(shù)相同,最后一個參數(shù)為回調函數(shù),函數(shù)內(nèi)有兩個參數(shù) err
(錯誤)和 data
(數(shù)據(jù)),該方法沒有返回值,回調函數(shù)在讀取文件成功后執(zhí)行
const fs = require("fs"); fs.readFile("1.txt", "utf8", (err, data) => { if(!err){ console.log(data); // Hello } });
文件寫入
writeFileSync
同步寫入,有三個參數(shù):
- 第一個參數(shù)為寫入文件的路徑或文件描述符
- 第二個參數(shù)為寫入的數(shù)據(jù),類型為 String 或 Buffer
- 第三個參數(shù)為 options,默認值為 null,其中有 encoding(編碼,默認為 utf8)、 flag(標識位,默認為 w)和 mode(權限位,默認為 0o666),也可直接傳入 encoding
const fs = require("fs"); fs.writeFileSync("2.txt", "Hello world"); let data = fs.readFileSync("2.txt", "utf8"); console.log(data); // Hello world
writeFile
異步寫入,writeFile
與 writeFileSync
的前三個參數(shù)相同,最后一個參數(shù)為回調函數(shù),函數(shù)內(nèi)有一個參數(shù) err
(錯誤),回調函數(shù)在文件寫入數(shù)據(jù)成功后執(zhí)行
const fs = require("fs"); fs.writeFile("2.txt", "Hello world", err => { if (!err) { fs.readFile("2.txt", "utf8", (err, data) => { console.log(data); // Hello world }); } });
文件追加寫入
appendFileSync
參數(shù)如下:
- 第一個參數(shù)為寫入文件的路徑或文件描述符
- 第二個參數(shù)為寫入的數(shù)據(jù),類型為 String 或 Buffer
- 第三個參數(shù)為 options,默認值為 null,其中有 encoding(編碼,默認為 utf8)、 flag(標識位,默認為 a)和 mode(權限位,默認為 0o666),也可直接傳入 encoding
const fs = require("fs"); fs.appendFileSync("3.txt", " world"); let data = fs.readFileSync("3.txt", "utf8");
appendFile
異步追加寫入方法 appendFile
與 appendFileSync
的前三個參數(shù)相同,最后一個參數(shù)為回調函數(shù),函數(shù)內(nèi)有一個參數(shù) err
(錯誤),回調函數(shù)在文件追加寫入數(shù)據(jù)成功后執(zhí)行
const fs = require("fs"); fs.appendFile("3.txt", " world", err => { if (!err) { fs.readFile("3.txt", "utf8", (err, data) => { console.log(data); // Hello world }); } });
文件拷貝
copyFileSync
同步拷貝
const fs = require("fs"); fs.copyFileSync("3.txt", "4.txt"); let data = fs.readFileSync("4.txt", "utf8"); console.log(data); // Hello world
copyFile
異步拷貝
const fs = require("fs"); fs.copyFile("3.txt", "4.txt", () => { fs.readFile("4.txt", "utf8", (err, data) => { console.log(data); // Hello world }); });
創(chuàng)建目錄
mkdirSync
同步創(chuàng)建,參數(shù)為一個目錄的路徑,沒有返回值,在創(chuàng)建目錄的過程中,必須保證傳入的路徑前面的文件目錄都存在,否則會拋出異常
// 假設已經(jīng)有了 a 文件夾和 a 下的 b 文件夾 fs.mkdirSync("a/b/c")
mkdir
異步創(chuàng)建,第二個參數(shù)為回調函數(shù)
fs.mkdir("a/b/c", err => { if (!err) console.log("創(chuàng)建成功"); });
以上就是node里的filesystem模塊文件讀寫操作詳解的詳細內(nèi)容,更多關于node filesystem文件讀寫操作的資料請關注腳本之家其它相關文章!
相關文章
利用nodeJs anywhere搭建本地服務器環(huán)境的方法
今天小編就為大家分享一篇利用nodeJs anywhere搭建本地服務器環(huán)境的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Node.js使用SQLite數(shù)據(jù)庫方法大全
Node.js是一種流行的JavaScript運行時,提供了許多有用的模塊和庫來構建Web應用程序,而SQLite是一種嵌入式關系型數(shù)據(jù)庫,它可以運行在各種操作系統(tǒng)上,包括Windows、Linux和Mac OS X等,在Node.js中,可以通過安裝sqlite3模塊來訪問SQLite數(shù)據(jù)庫2023-10-10