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

Node.js?內(nèi)置模塊fs文件系統(tǒng)操作示例詳解

 更新時間:2023年02月17日 09:53:11   作者:亦黑迷失  
這篇文章主要為大家介紹了Node.js?內(nèi)置模塊fs文件系統(tǒng)操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

File system 文件系統(tǒng)

fs(File system,文件系統(tǒng)) 是 node 的一個內(nèi)置模塊,可用于在多種操作系統(tǒng)中(Windows 、macOS 等)對文件進(jìn)行操作。查閱 node 的官方文檔,可以看到 File system 下有非常多的 API:

它們有的用于對文件進(jìn)行讀寫操作,有的用于對文件夾操作等,且都提供同步、異步Promise 這 3 種操作方式。下面舉幾個常用的 API 為例,進(jìn)行說明。

操作文件

讀取文件

同步讀取

fs.readFileSync() 用于同步 (Sync) 讀取文件,直接傳入要讀取的文件的路徑或文件描述符即可:

// 代碼塊 1.1.1
const fs = require('fs')
// 同步讀取
const resSync = fs.readFileSync('./test.txt')
console.log(resSync)
console.log('看看會不會阻塞')

執(zhí)行結(jié)果如下,第 6 行的打印是在第 5 行之后,說明同步操作會阻塞后續(xù)代碼的運(yùn)行:

resSync 的結(jié)果是 Buffer 對象,本質(zhì)上是二進(jìn)制的內(nèi)容,只是以十六進(jìn)制來展示。如果想看到文本內(nèi)容,可以對結(jié)果使用 toString() 進(jìn)行轉(zhuǎn)換:console.log(resSync.toString()),或者給 fs.readFileSync() 傳入第 2 個參數(shù) —— 一個用于指定配置的可選對象,該對象有 2 個屬性:

  • encoding,默認(rèn)值為 null ,也就是結(jié)果顯示為 buffer,想顯示文本可以改為 'utf-8' (或 'utf8');
  • flag,讀取文件時默認(rèn)值為 'r',更多 flag 相關(guān)信息可查看官方文檔。
// 代碼塊 1.1.2
const resSync = fs.readFileSync('./test.txt', {
  encoding: 'utf-8',
  flag: 'r'
})
console.log(resSync)
console.log('看看會不會阻塞')

現(xiàn)在看到的 resSync 就為一個字符串了:

異步讀取 - Callback

fs.readFile() 用于異步讀取文件,其可以傳入 3 個參數(shù),前兩個與 fs.readFileSync() 相同,第 3 個參數(shù)為一個回調(diào)函數(shù),當(dāng)獲取到讀取結(jié)果時被調(diào)用:

// 代碼塊 1.2.1
fs.readFile(
  './test.txt',
  {
    encoding: 'utf-8'
  },
  (err, data) => {
    if (!err) console.log(data)
  }
)
console.log('看看會不會阻塞')

執(zhí)行結(jié)果如下,可以看到異步讀取不會阻塞后續(xù)代碼的執(zhí)行:

異步讀取 - Promise

fs.promises.readFile() 也是用于異步讀取文件,但可以避免在采用回調(diào)函數(shù)的方式獲取結(jié)果時容易產(chǎn)生的回調(diào)地獄:

// 代碼塊 1.3.1
fs.promises
  .readFile('./test.txt', {
    encoding: 'utf-8'
  })
  .then(res => {
    console.log(res)
  })
  .catch(err => console.log(err))

寫入文件

寫入文件也有同步異步的方法,下面以異步 - callback 的 api fs.writeFile()為例。

其第 1 個參數(shù)可以是文件的地址或文件描述符,如果文件不存在,則會進(jìn)行創(chuàng)建;

第 2 個參數(shù)為要寫入的內(nèi)容;

第 3 個參數(shù)為用于指定配置的可選對象,其中有之前介紹過的兩個屬性 encodingflag,只不過這里 encoding 的默認(rèn)值為 'utf8' ,flag 的默認(rèn)值為 'w',即默認(rèn)寫入的內(nèi)容會覆蓋原有的內(nèi)容,如果是想在原內(nèi)容后追加寫入,則可以改為 'a' (append);

第 4 個參數(shù)是一個回調(diào)函數(shù),在寫入操作執(zhí)行結(jié)束后調(diào)用,如果寫入發(fā)生錯誤,就會把錯誤信息作為參數(shù)傳入:

fs.writeFile(
  './test.txt',
  'Hello Juejin',
  {
    encoding: 'utf8',
    flag: 'w'
  },
  err => {
    if (err) {
      console.log(err)
      return
    }
    console.log('寫入成功')
  }
)

文件描述符

前面說到,讀取文件的這 3 種方法,傳入的第一個參數(shù)除了文件的路徑外,還可以是文件描述符(file descriptor)。在常見的操作系統(tǒng)中,內(nèi)核對于每個進(jìn)程都維護(hù)著一張當(dāng)前打開的文件和資源的表格,而每個打開的文件都會被分配一個簡單的數(shù)字用于標(biāo)識和跟蹤文件,雖然不同的操作系統(tǒng)具體實(shí)現(xiàn)可能不同,但 node 幫我們處理了差異,為每個打開的文件分配了個數(shù)字類型的文件描述符。

我們可以通過 fs.open() 打開一個文件來獲取文件描述符:

// 代碼塊 2.1.1
fs.open('./test.txt', (err, fd) => {
  if (!err) {
    console.log(fd)
  }
})

查看類型可以得知其第 2 個參數(shù),也就是回調(diào)函數(shù)會被傳入兩個參數(shù),第 1 個為錯誤信息 err,第 2 個就是文件描述符 fd

得到的結(jié)果為 3:

查看文件信息

獲取到了文件描述符,我們可以通過 fs.fstat() (其第 1 個參數(shù)只能是 fd)查看文件信息:

fs.open('./test.txt', (err, fd) => {
  if (err) return
  fs.fstat(fd, (err, stats) => {
    if (err) return
    console.log(stats)
    fs.close(fd) // 關(guān)閉文件
  })
})

打印結(jié)果如下:

操作文件夾

創(chuàng)建文件夾

fs 模塊還能對文件夾進(jìn)行操作,比如 fs.mkdir() 就可以創(chuàng)建文件夾,mkdir 可以看成是 make directory 的縮寫:

fs.mkdir('./test', err => console.log(err)) // 創(chuàng)建 test 文件夾

讀取文件夾

fs.readdir() 可以用于讀取文件夾,在回調(diào)函數(shù)中會返回讀取到的文件夾中所包含的文件或文件夾,比如 node 目錄下的結(jié)構(gòu)如下圖所示:

執(zhí)行如下代碼對 node 目錄進(jìn)行讀?。?/p>

// fs.js
fs.readdir('../node', (err, files) => {
  if (!err) console.log(files)
})

打印結(jié)果為:[ 'fs.js', 'test', 'test.txt' ]。 如果想獲取更詳細(xì)的信息,可以傳入配置對象,將 withFileTypes 設(shè)置為 true

fs.readdir('../node', { withFileTypes: true }, (err, files) => {
  if (!err) console.log(files)
})

那么打印的結(jié)果就會通過 Symbol(type) 的值來表明是文件(值為 1),還是文件夾(值為 2),關(guān)于 Symbol 的介紹可參看 Symbol 詳解

現(xiàn)在還有個問題,就是 test 文件夾里的 index.txt 文件沒有被讀取到,如果想讀取 node 目錄下的所有文件,可以通過遞歸讀?。?/p>

function readDirRecursive(path) {
  fs.readdir(path, { withFileTypes: true }, (err, files) => {
    if (err) return
    files.forEach(item => {
      if (item.isDirectory()) {
        readDirRecursive(`${path}/${item.name}`)
      } else {
        console.log(item.name)
      }
    })
  })
}
readDirRecursive('../node')

我們也需要將 withFileTypes 設(shè)置為 true,這樣返回的 files 數(shù)組中的元素才是一個個對象,并且有 name 屬性和 isDirectory() 方法可以判斷是否為文件夾。

重命名文件夾/文件

fs.rename() 可以重命名文件夾或文件,第 1 個參數(shù)為舊名稱,第 2 個參數(shù)傳新名稱即可:

fs.rename('./test', './juejin', err => console.log(err))

以上就是Node.js 內(nèi)置模塊fs文件系統(tǒng)操作示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Node.js內(nèi)置模塊fs操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談KOA2 Restful方式路由初探

    淺談KOA2 Restful方式路由初探

    這篇文章主要介紹了淺談KOA2 Restful方式路由初探,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    這篇文章主要介紹了nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳,需要的朋友可以參考下
    2015-02-02
  • 解析Node.js異常處理中domain模塊的使用方法

    解析Node.js異常處理中domain模塊的使用方法

    這篇文章主要介紹了Node.js異常處理中domain模塊的使用方法,文中最后提到了內(nèi)存泄漏的相關(guān)問題,值得注意,需要的朋友可以參考下
    2016-02-02
  • 如何在NestJS中添加對Shopify的WebHook驗(yàn)證詳解

    如何在NestJS中添加對Shopify的WebHook驗(yàn)證詳解

    這篇文章主要為大家介紹了如何在NestJS中添加對Shopify的WebHook驗(yàn)證詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • node基于express框架操作Mysql數(shù)據(jù)庫的步驟

    node基于express框架操作Mysql數(shù)據(jù)庫的步驟

    這篇文章主要介紹了node基于express框架操作Mysql數(shù)據(jù)庫的步驟,文章給大家提到安裝mysql模塊和配置mysql模塊的步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 輕松創(chuàng)建nodejs服務(wù)器(4):路由

    輕松創(chuàng)建nodejs服務(wù)器(4):路由

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(4):路由,服務(wù)器需要根據(jù)不同的URL或請求來執(zhí)行不一樣的操作,我們可以通過路由來實(shí)現(xiàn)這個步驟,需要的朋友可以參考下
    2014-12-12
  • node crawler如何添加promise支持

    node crawler如何添加promise支持

    這篇文章主要介紹了node crawler如何添加promise支持,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • node.js中的fs.fchown方法使用說明

    node.js中的fs.fchown方法使用說明

    這篇文章主要介紹了node.js中的fs.fchown方法使用說明,本文介紹了fs.fchown方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 用node-webkit把web應(yīng)用打包成桌面應(yīng)用(windows環(huán)境)

    用node-webkit把web應(yīng)用打包成桌面應(yīng)用(windows環(huán)境)

    這篇文章主要介紹了windows環(huán)境下用node-webkit把web應(yīng)用打包成桌面應(yīng)用的教程,需要的朋友可以參考下
    2018-02-02
  • Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn)

    Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn)

    最近開發(fā)需要搭建一個https的服務(wù),正好最近在用nodejs和express,本文章主要介紹了Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12

最新評論

农安县| 浦东新区| 桂东县| 桐城市| 桂东县| 普陀区| 镇康县| 临沭县| 焦作市| 皮山县| 抚州市| 弋阳县| 贡觉县| 蒙城县| 延边| 礼泉县| 罗江县| 贵德县| 汝阳县| 黑水县| 祁东县| 城固县| 五莲县| 黄梅县| 秀山| 平塘县| 安宁市| 弥勒县| 正安县| 山阴县| 建德市| 安泽县| 玉树县| 丹棱县| 东莞市| 太康县| 临海市| 昭平县| 垫江县| 黎城县| 渝中区|