最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node里的filesystem模塊文件讀寫操作詳解

 更新時(shí)間:2022年09月30日 10:21:37   作者:別救了這猴子廢了  
這篇文章主要為大家介紹了node里的filesystem模塊文件讀寫操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、是什么

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

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

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

const fs = require('fs');

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

二、文件知識(shí)

在計(jì)算機(jī)中有關(guān)于文件的知識(shí):

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

權(quán)限位 mode

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

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

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為文件夾,-為文件,后九位就代表當(dāng)前用戶、用戶所屬組和其他用戶的權(quán)限位,按每三位劃分,分別代表讀(r)、寫(w)和執(zhí)行(x),- 代表沒有當(dāng)前位對(duì)應(yīng)的權(quán)限

標(biāo)識(shí)位

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

符號(hào)含義
r讀取文件,如果文件不存在則拋出異常。
r+讀取并寫入文件,如果文件不存在則拋出異常。
rs讀取并寫入文件,指示操作系統(tǒng)繞開本地文件系統(tǒng)緩存。
w寫入文件,文件不存在會(huì)被創(chuàng)建,存在則清空后寫入。
wx寫入文件,排它方式打開。
w+讀取并寫入文件,文件不存在則創(chuàng)建文件,存在則清空后寫入。
wx+和 w+ 類似,排他方式打開。
a追加寫入,文件不存在則創(chuàng)建文件。
ax與 a 類似,排他方式打開。
a+讀取并追加寫入,不存在則創(chuàng)建。
ax+與 a+ 類似,排他方式打開。

文件描述為 fd

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

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

在 NodeJS中,每操作一個(gè)文件,文件描述符是遞增的,文件描述符一般從 3 開始,因?yàn)榍懊嬗?nbsp;01、2三個(gè)比較特殊的描述符,分別代表 process.stdin(標(biāo)準(zhǔn)輸入)、process.stdout(標(biāo)準(zhǔn)輸出)和 process.stderr(錯(cuò)誤輸出)

三、方法

下面針對(duì)fs模塊常用的方法進(jìn)行展開:

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

文件讀取

fs.readFileSync

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

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

結(jié)果為返回文件的內(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 的前兩個(gè)參數(shù)相同,最后一個(gè)參數(shù)為回調(diào)函數(shù),函數(shù)內(nèi)有兩個(gè)參數(shù) err(錯(cuò)誤)和 data(數(shù)據(jù)),該方法沒有返回值,回調(diào)函數(shù)在讀取文件成功后執(zhí)行

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

文件寫入

writeFileSync

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

  • 第一個(gè)參數(shù)為寫入文件的路徑或文件描述符
  • 第二個(gè)參數(shù)為寫入的數(shù)據(jù),類型為 String 或 Buffer
  • 第三個(gè)參數(shù)為 options,默認(rèn)值為 null,其中有 encoding(編碼,默認(rèn)為 utf8)、 flag(標(biāo)識(shí)位,默認(rèn)為 w)和 mode(權(quán)限位,默認(rèn)為 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 的前三個(gè)參數(shù)相同,最后一個(gè)參數(shù)為回調(diào)函數(shù),函數(shù)內(nèi)有一個(gè)參數(shù) err(錯(cuò)誤),回調(diào)函數(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ù)如下:

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

appendFile

異步追加寫入方法 appendFile 與 appendFileSync 的前三個(gè)參數(shù)相同,最后一個(gè)參數(shù)為回調(diào)函數(shù),函數(shù)內(nèi)有一個(gè)參數(shù) err(錯(cuò)誤),回調(diào)函數(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ù)為一個(gè)目錄的路徑,沒有返回值,在創(chuàng)建目錄的過程中,必須保證傳入的路徑前面的文件目錄都存在,否則會(huì)拋出異常

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

mkdir

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

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

以上就是node里的filesystem模塊文件讀寫操作詳解的詳細(xì)內(nèi)容,更多關(guān)于node filesystem文件讀寫操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nodejs Post請(qǐng)求報(bào)socket hang up錯(cuò)誤的解決辦法

    Nodejs Post請(qǐng)求報(bào)socket hang up錯(cuò)誤的解決辦法

    這篇文章主要介紹了Nodejs Post請(qǐng)求報(bào)socket hang up錯(cuò)誤的解決辦法,本文因少加了headers字段信息導(dǎo)致出現(xiàn)這個(gè)錯(cuò)誤,本文給出了一個(gè)完整的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-09-09
  • node.js?使用process.argv獲取和處理命令行參數(shù)的操作

    node.js?使用process.argv獲取和處理命令行參數(shù)的操作

    process.argv是Node.js中用于獲取命令行參數(shù)的數(shù)組,基本使用方法是通過命令行傳遞參數(shù)并在腳本中訪問這些參數(shù),參數(shù)可以根據(jù)需求進(jìn)行處理,也可以使用第三方庫如minimist或yargs來簡(jiǎn)化參數(shù)解析,這些工具可以幫助開發(fā)者有效地管理和使用命令行參數(shù),提高腳本的靈活性和功能性
    2024-10-10
  • 簡(jiǎn)述pm2常用命令集合及配置文件說明

    簡(jiǎn)述pm2常用命令集合及配置文件說明

    這篇文章主要介紹了簡(jiǎn)述pm2常用命令集合及配置文件說明,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Node 代理訪問的實(shí)現(xiàn)

    Node 代理訪問的實(shí)現(xiàn)

    這篇文章主要介紹了Node 代理訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 實(shí)例分析nodejs模塊xml2js解析xml過程中遇到的坑

    實(shí)例分析nodejs模塊xml2js解析xml過程中遇到的坑

    這篇文章主要介紹了實(shí)例分析nodejs模塊xml2js解析xml過程中遇到的坑,涉及nodejs模塊xml2js解析xml過程中parseString方法參數(shù)使用技巧,需要的朋友可以參考下
    2017-03-03
  • 淺談Node.js之異步流控制

    淺談Node.js之異步流控制

    本篇文章主要介紹了淺談Node.js之異步流控制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 快速刪除 node_modules 目錄的集中方法(多種方法)

    快速刪除 node_modules 目錄的集中方法(多種方法)

    本文介紹了三種快速刪除node_modules目錄的方法:使用rimraf工具、通過npx運(yùn)行rimraf以及在Windows命令提示符中使用del命令,每種方法都適合不同的操作系統(tǒng)和使用場(chǎng)景
    2024-11-11
  • node.js微信公眾平臺(tái)開發(fā)教程

    node.js微信公眾平臺(tái)開發(fā)教程

    這篇文章主要為大家分享了node.js微信公眾平臺(tái)開發(fā)教程,如何進(jìn)行微信開發(fā),感興趣的小伙伴們可以參考一下
    2016-03-03
  • 安裝了node.js但是npm命令不可用的解決方案

    安裝了node.js但是npm命令不可用的解決方案

    這篇文章主要介紹了安裝了node.js但是npm命令不可用的解決方案,文中通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的解決問題有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件

    node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件

    這篇文章主要介紹了node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件的示例,幫助大家更好的理解和使用node.js,感興趣的朋友可以了解下
    2021-02-02

最新評(píng)論

莱阳市| 航空| 乌苏市| 新田县| 昌平区| 涿州市| 高碑店市| 宝应县| 南澳县| 修武县| 杨浦区| 林甸县| 祁连县| 惠东县| 汾西县| 五莲县| 阜平县| 绍兴市| 怀集县| 卢龙县| 孙吴县| 临潭县| 遂昌县| 钦州市| 富民县| 林口县| 修文县| 宁晋县| 元江| 仙居县| 扶风县| 鄂托克旗| 简阳市| 卫辉市| 会昌县| 县级市| 绩溪县| 宾川县| 天柱县| 保康县| 平陆县|