成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說對 Node 中的 Fs 模塊的理解? 有哪些常用方法?

系統(tǒng)
操作系統(tǒng)會為每個打開的文件分配一個名為文件描述符的數(shù)值標(biāo)識,文件操作使用這些文件描述符來識別與追蹤每個特定的文件。

[[403607]]

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

一、是什么

fs(file system),該模塊提供本地文件的讀寫能力,基本上是POSIX文件操作命令的簡單包裝

可以說,所有與文件的操作都是通過fs核心模塊實現(xiàn)

導(dǎo)入模塊如下:

  1. const fs = require('fs'); 

這個模塊對所有文件系統(tǒng)操作提供異步(不具有sync 后綴)和同步(具有 sync 后綴)兩種操作方式,而供開發(fā)者選擇

二、文件知識

在計算機中有關(guān)于文件的知識:

  • 權(quán)限位 mode
  • 標(biāo)識位 flag
  • 文件描述為 fd

權(quán)限位 mode

針對文件所有者、文件所屬組、其他用戶進行權(quán)限分配,其中類型又分成讀、寫和執(zhí)行,具備權(quán)限位4、2、1,不具備權(quán)限為0

如在linux查看文件權(quán)限位:

  1. drwxr-xr-x 1 PandaShen 197121 0 Jun 28 14:41 core 
  2. -rw-r--r-- 1 PandaShen 197121 293 Jun 23 17:44 index.md 

在開頭前十位中,d為文件夾,-為文件,后九位就代表當(dāng)前用戶、用戶所屬組和其他用戶的權(quán)限位,按每三位劃分,分別代表讀(r)、寫(w)和執(zhí)行(x),- 代表沒有當(dāng)前位對應(yīng)的權(quán)限

標(biāo)識位

標(biāo)識位代表著對文件的操作方式,如可讀、可寫、即可讀又可寫等等,如下表所示:

符號 含義
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ù)值標(biāo)識,文件操作使用這些文件描述符來識別與追蹤每個特定的文件

Window系統(tǒng)使用了一個不同但概念類似的機制來追蹤資源,為方便用戶,NodeJS抽象了不同操作系統(tǒng)間的差異,為所有打開的文件分配了數(shù)值的文件描述符

在 NodeJS中,每操作一個文件,文件描述符是遞增的,文件描述符一般從 3 開始,因為前面有 0、1、2三個比較特殊的描述符,分別代表 process.stdin(標(biāo)準(zhǔn)輸入)、process.stdout(標(biāo)準(zhǔn)輸出)和 process.stderr(錯誤輸出)

三、方法

下面針對fs模塊常用的方法進行展開:

  • 文件讀取
  • 文件寫入
  • 文件追加寫入
  • 文件拷貝
  • 創(chuàng)建目錄
  • 文件讀取

fs.readFileSync

同步讀取,參數(shù)如下:

  • 第一個參數(shù)為讀取文件的路徑或文件描述符
  • 第二個參數(shù)為 options,默認值為 null,其中有 encoding(編碼,默認為 null)和 flag(標(biāo)識位,默認為 r),也可直接傳入 encoding

結(jié)果為返回文件的內(nèi)容

  1. const fs = require("fs"); 
  2.  
  3. let buf = fs.readFileSync("1.txt"); 
  4. let data = fs.readFileSync("1.txt""utf8"); 
  5.  
  6. console.log(buf); // <Buffer 48 65 6c 6c 6f> 
  7. console.log(data); // Hello 

fs.readFile

異步讀取方法 readFile 與 readFileSync 的前兩個參數(shù)相同,最后一個參數(shù)為回調(diào)函數(shù),函數(shù)內(nèi)有兩個參數(shù) err(錯誤)和 data(數(shù)據(jù)),該方法沒有返回值,回調(diào)函數(shù)在讀取文件成功后執(zhí)行

  1. const fs = require("fs"); 
  2.  
  3. fs.readFile("1.txt""utf8", (err, data) => { 
  4.    if(!err){ 
  5.        console.log(data); // Hello 
  6.    } 
  7. }); 

文件寫入

writeFileSync

同步寫入,有三個參數(shù):

  • 第一個參數(shù)為寫入文件的路徑或文件描述符
  • 第二個參數(shù)為寫入的數(shù)據(jù),類型為 String 或 Buffer
  • 第三個參數(shù)為 options,默認值為 null,其中有 encoding(編碼,默認為 utf8)、 flag(標(biāo)識位,默認為 w)和 mode(權(quán)限位,默認為 0o666),也可直接傳入 encoding
  1. const fs = require("fs"); 
  2.  
  3. fs.writeFileSync("2.txt""Hello world"); 
  4. let data = fs.readFileSync("2.txt""utf8"); 
  5.  
  6. console.log(data); // Hello world 

writeFile

異步寫入,writeFile 與 writeFileSync 的前三個參數(shù)相同,最后一個參數(shù)為回調(diào)函數(shù),函數(shù)內(nèi)有一個參數(shù) err(錯誤),回調(diào)函數(shù)在文件寫入數(shù)據(jù)成功后執(zhí)行

  1. const fs = require("fs"); 
  2.  
  3. fs.writeFile("2.txt""Hello world", err => { 
  4.     if (!err) { 
  5.         fs.readFile("2.txt""utf8", (err, data) => { 
  6.             console.log(data); // Hello world 
  7.         }); 
  8.     } 
  9. }); 

文件追加寫入

appendFileSync

參數(shù)如下:

  • 第一個參數(shù)為寫入文件的路徑或文件描述符
  • 第二個參數(shù)為寫入的數(shù)據(jù),類型為 String 或 Buffer
  • 第三個參數(shù)為 options,默認值為 null,其中有 encoding(編碼,默認為 utf8)、 flag(標(biāo)識位,默認為 a)和 mode(權(quán)限位,默認為 0o666),也可直接傳入 encoding
  1. const fs = require("fs"); 
  2.  
  3. fs.appendFileSync("3.txt"" world"); 
  4. let data = fs.readFileSync("3.txt""utf8"); 

appendFile

異步追加寫入方法 appendFile 與 appendFileSync 的前三個參數(shù)相同,最后一個參數(shù)為回調(diào)函數(shù),函數(shù)內(nèi)有一個參數(shù) err(錯誤),回調(diào)函數(shù)在文件追加寫入數(shù)據(jù)成功后執(zhí)行

  1. const fs = require("fs"); 
  2.  
  3. fs.appendFile("3.txt", " world", err => { 
  4.     if (!err) { 
  5.         fs.readFile("3.txt", "utf8", (err, data) => { 
  6.             console.log(data); // Hello world 
  7.         }); 
  8.     } 
  9. }); 

文件拷貝

copyFileSync

同步拷貝

  1. const fs = require("fs"); 
  2.  
  3. fs.copyFileSync("3.txt""4.txt"); 
  4. let data = fs.readFileSync("4.txt""utf8"); 
  5.  
  6. console.log(data); // Hello world 

copyFile

異步拷貝

  1. const fs = require("fs"); 
  2.  
  3. fs.copyFile("3.txt""4.txt", () => { 
  4.     fs.readFile("4.txt""utf8", (err, data) => { 
  5.         console.log(data); // Hello world 
  6.     }); 
  7. }); 

創(chuàng)建目錄

mkdirSync

同步創(chuàng)建,參數(shù)為一個目錄的路徑,沒有返回值,在創(chuàng)建目錄的過程中,必須保證傳入的路徑前面的文件目錄都存在,否則會拋出異常

  1. // 假設(shè)已經(jīng)有了 a 文件夾和 a 下的 b 文件夾 
  2. fs.mkdirSync("a/b/c"

mkdir

異步創(chuàng)建,第二個參數(shù)為回調(diào)函數(shù)

  1. fs.mkdir("a/b/c", err => { 
  2.     if (!err) console.log("創(chuàng)建成功"); 
  3. }); 

參考文獻

http://nodejs.cn/api/fs.html

 

https://segmentfault.com/a/1190000019913303

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-06-03 08:14:01

NodeProcessJavaScript

2021-06-07 09:41:48

NodeBuffer 網(wǎng)絡(luò)協(xié)議

2021-06-08 08:33:23

NodeStream數(shù)據(jù)

2021-06-10 07:51:07

Node.js循環(huán)機制

2021-10-29 09:40:21

設(shè)計模式軟件

2021-09-13 09:23:52

TypeScript命名空間

2021-06-30 07:19:36

React事件機制

2021-07-19 07:55:24

Redux中間件原理

2021-05-31 10:35:34

TCPWebSocket協(xié)議

2021-08-11 08:53:23

Git命令面試

2021-07-12 08:35:24

組件應(yīng)用場景

2021-07-07 08:36:45

React應(yīng)用場景

2021-06-15 10:01:02

應(yīng)用系統(tǒng)軟件

2021-06-02 09:42:29

Node. js全局對象

2021-07-13 07:52:03

ReactHooks組件

2021-09-26 10:57:16

集合操作場景

2021-07-08 06:51:29

React函數(shù)組件

2024-07-26 08:10:10

2021-09-27 06:50:04

非線性數(shù)據(jù)

2021-07-29 07:55:20

React Fiber架構(gòu)引擎
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品久久久久久下一站 | 日本免费一区二区三区四区 | 成人三级网址 | 精品一区二区三区不卡 | 亚洲国产欧美日韩 | 国产成人免费视频 | 亚洲国产一区在线 | 亚洲欧美成人影院 | 久久一视频 | 亚洲视频一区在线观看 | 日韩一区二区视频 | 自拍偷拍一区二区三区 | 九热在线 | 久久免费观看视频 | 成人免费在线视频 | 日本不卡免费新一二三区 | 亚洲国产片 | 久久人人爽人人爽 | 国产午夜视频 | 丁香五月缴情综合网 | 国产视频日韩 | 欧美在线色 | 国产福利视频在线观看 | 午夜精品久久久 | 成人免费在线观看 | 久久久久国产一区二区三区 | 在线播放国产一区二区三区 | 每日在线更新av | 国产精品久久 | 久久一| 日韩三区 | 97色在线视频 | 91精品国产日韩91久久久久久 | 国产免费自拍 | 国产精品一区二区三区四区 | 伊人色综合久久久天天蜜桃 | 一区二区三区视频在线 | 91精品观看 | av在线一区二区 | 亚洲精品无 | 亚洲视频一区在线观看 |