溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

node中的fs模塊怎么使用

發(fā)布時間:2022-07-13 09:59:21 來源:億速云 閱讀:519 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“node中的fs模塊怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“node中的fs模塊怎么使用”吧!

在node中,fs模塊指的是“文件系統(tǒng)模塊”,是用來操作文件的模塊。fs模塊的API大都提供三種操作方式:1、同步操作文件:代碼會被阻塞,不會繼續(xù)執(zhí)行;2、異步回調(diào)函數(shù)操作文件:代碼不會被阻塞,需要傳入回調(diào)函數(shù),當獲取到結(jié)果時,回調(diào)函數(shù)執(zhí)行;3、異步Promise操作文件:代碼不會被阻塞,通過fs.promises調(diào)用方法操作,會返回一個Promise。

node中的fs模塊怎么使用

本教程操作環(huán)境:windows7系統(tǒng)、nodejs16版,DELL G3電腦。

文件系統(tǒng)模塊(簡稱 fs)允許我們訪問計算機上的文件系統(tǒng)并與之交互。

fs 模塊是 Node.js 官方提供的、用來操作文件的模塊。它提供了一系列的方法和屬性,用來滿足用戶對文件的操作需求。

  • fs.readFile() 方法,用來讀取指定文件中的內(nèi)容

  • fs.writeFile() 方法,用來向指定的文件中寫入內(nèi)容 如果要在 JavaScript 代碼中

如何使用 fs

文件系統(tǒng)模塊是一個核心的 Node.js 模塊。這意味著我們不必安裝它。我們唯一需要做的就是將 fs 模塊導入到自己的文件中。

因此,在文件頂部添加:

const fs = require('fs')

現(xiàn)在,我們可以使用前綴 fs 從文件系統(tǒng)模塊調(diào)用任何方法。

或者,我們可以只從 fs API 導入所需的方法,如下所示:

const { writeFile, readFile } = require('fs')

注意:為了方便起見,我們還需要導入 path 模塊。它是另一個核心 Node.js 模塊,它允許我們使用文件和目錄路徑。

導入 fs 模塊后,在文件中添加:

const path = require('path')

使用文件系統(tǒng)模塊時,path 模塊不是必需的。但它對我們有很大的幫助!

同步與異步

fs模塊的文件操作一般支持同步和異步兩種API,異步又包括了回調(diào)函數(shù)和promsie的形式。同步一般后面帶sync字樣。

fs模塊的API大都提供三種操作方式:

  • 同步操作文件:代碼會被阻塞,不會繼續(xù)執(zhí)行

  • 異步回調(diào)函數(shù)操作文件:代碼不會被阻塞,需要傳入回調(diào)函數(shù),當獲取到結(jié)果時,回調(diào)函數(shù)執(zhí)行

  • 異步Promise操作文件:代碼不會被阻塞,通過fs.promises調(diào)用方法操作,會返回一個Promise,可以通過then、catch進行處理。

需要注意的是,默認情況下,所有 fs 方法都是異步的。但是,我們可以通過在方法末尾添加 Sync 來使用同步版本。

例如,writeFile 方法的同步版本為 writeFileSync。同步方法將同步的完成代碼,因此它們阻塞了主線程。阻塞 Node.js 中的主線程被認為是不好的做法,我們不應該這么做。

因此,以下我們都將使用文件系統(tǒng)模塊中的異步方法。

寫入文件

要從 Node.js 應用程序?qū)懭胛募埵褂?writeFile 方法。

writeFile 方法至少接受以下參數(shù):

  • 文件名

  • 內(nèi)容

  • 回調(diào)

如果指定的文件已經(jīng)存在,它會將舊內(nèi)容替換為您作為參數(shù)提供的內(nèi)容。如果指定的文件不存在,則創(chuàng)建一個新文件。

導入 fspath 模塊后,在文件中編寫以下代碼:

fs.writeFile('content.txt', 'All work and no play makes Jack a dull boy!', err => {
  if (err) throw err

  process.stdout.write('創(chuàng)建成功!')
})

上面的代碼將創(chuàng)建了一個名為 content.txt 的新文件,并添加了文本 All work and no play makes Jack a dull boy! 作為內(nèi)容。如果存在任何錯誤,回調(diào)函數(shù)將拋出該錯誤。否則,它將向控制臺輸出文件創(chuàng)建成功。

writeFile 還有其他變體,例如:

  • fs.writeFileSync — 同步寫入文件

  • fsPromises.writeFile — 使用基于 Promise 的 API 寫入文件

從文件中讀取

在讀取文件之前,需要創(chuàng)建并存儲文件的路徑。path 模塊的路徑在這里很方便。

使用 join 模塊中的 path 方法,您可以創(chuàng)建文件路徑,如下所示:

const filePath = path.join(process.cwd(), 'content.txt')

第一個參數(shù) process.cwd() 返回當前工作目錄。現(xiàn)在您已經(jīng)有了文件路徑,可以讀取文件的內(nèi)容了。

在文件中編寫以下代碼:

fs.readFile(filePath, (error, content) => {
  if (error) throw error

  process.stdout.write(content)
})

readFile 方法至少接受兩個參數(shù):

  • 文件的路徑

  • 回調(diào)

如果有錯誤,它會拋出一個錯誤。否則,它會在終端中輸出文件內(nèi)容。

readFile 還有其他變體,例如:

  • fs.readFileSync — 同步寫入文件

  • fsPromises.readFile — 使用基于 Promise 的 API 寫入文件

讀取目錄的內(nèi)容

在目錄中顯示文件與讀取文件內(nèi)容非常相似。但是,不是傳遞文件路徑,而是傳遞當前工作目錄(我們可以傳遞任何其他目錄)。

然后,傳遞一個回調(diào)函數(shù)來處理響應。在文件中編寫以下代碼:

fs.readdir(process.cwd(), (error, files) => {
  if (error) throw error

  console.log(files)
})

到目前為止,我們只使用 process.stdout.write 將內(nèi)容輸出到終端。但是,您可以簡單地使用 console.log,就像上面的代碼片段一樣。

如果運行該應用程序,我們應該會得到一個包含目錄中所有文件的數(shù)組。

刪除文件

文件系統(tǒng)模塊有一種方法,允許您刪除文件。但是,需要注意的是,它只適用于文件,不適用于目錄。

當以文件路徑作為參數(shù)調(diào)用 unlink 方法時,它將刪除該文件。將以下代碼段添加到文件中:

fs.unlink(filePath, error => {
  if (error) throw error

  console.log('文件已刪除!')
})

如果您重新運行代碼,您的文件將被刪除!

創(chuàng)建目錄

我們可以使用 mkdir 方法異步創(chuàng)建目錄。在文件中編寫以下代碼:

fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => {
  if (err) throw err

  console.log('已成功創(chuàng)建文件夾!')
})

首先,要在當前工作目錄中創(chuàng)建一個新文件夾。如前所述,您可以使用 cwd() 方法從 process 對象獲取當前工作目錄。

然后,傳遞要創(chuàng)建的一個或多個文件夾。但是,這并不意味著您必須在當前工作目錄中創(chuàng)建新文件夾。你可以在任何地方創(chuàng)建它們。

現(xiàn)在,第二個參數(shù)是遞歸選項。如果未將其設(shè)置為 true,則無法創(chuàng)建多個文件夾。如果將 recursive 選項設(shè)置為 false,上述代碼將給出一個錯誤。試試看!

但是,如果您只想創(chuàng)建一個文件夾,則無需將 recursive 選項設(shè)置為 true

以下代碼可以正常工作!

fs.mkdir(`${process.cwd()}/myFolder`, err => {
  if (err) throw err

  console.log('已成功創(chuàng)建文件夾!')
});

因此,我想強調(diào)使用 recursive。如果要在文件夾中創(chuàng)建文件夾,則需要將其設(shè)置為 true。它將創(chuàng)建所有文件夾,即使它們不存在。

另一方面,如果您只想創(chuàng)建一個文件夾,可以將其保留為 false

刪除目錄

刪除目錄的邏輯類似于創(chuàng)建目錄。如果您查看為創(chuàng)建目錄而編寫的代碼和下面的代碼,您會發(fā)現(xiàn)相似之處。

因此,在文件中編寫以下代碼:

fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => {
  if (err) throw err

  console.log('已成功刪除文件夾!')
})

使用文件系統(tǒng)模塊中的 rmdir 方法,并傳遞以下參數(shù):

  • 要刪除的目錄

  • 遞歸屬性

  • 回調(diào)

如果將 recursive 屬性設(shè)置為 true,它將刪除文件夾及其內(nèi)容。請務必注意,如果文件夾中包含內(nèi)容,則需要將其設(shè)置為 true。否則,您將得到一個錯誤。

以下代碼段僅在文件夾為空時有效:

fs.rmdir(`${process.cwd()}/myFolder/`, err => {
  if (err) throw err

  console.log('已成功刪除文件夾!')
})

如果 myFolder 中有其他文件和/或文件夾,如果未傳遞 { recursive: true },則會出現(xiàn)錯誤。

知道何時使用 recursive 選項以及何時不避免問題是很重要的。

目錄/文件重命名

使用 fs 模塊,您可以重命名目錄和文件。下面的代碼片段顯示了如何使用 rename 方法進行此操作。

// 重命名一個目錄fs.rename(`${process.cwd()}/myFolder/secondFolder`, `${process.cwd()}/myFolder/newFolder`, err => {
  if (err) throw err

  console.log('目錄重命名!')
});// 重命名一個文件fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile.txt`, err => {
  if (err) throw err

  console.log('文件重命名!')
});

rename 方法包含三個參數(shù):

  • 第一個參數(shù)是現(xiàn)有的文件夾/文件

  • 第二個參數(shù)是新名稱

  • 回調(diào)

因此,要重命名文件或目錄,我們需要傳遞當前文件/目錄的名稱和新名稱。運行應用程序后,應更新目錄/文件的名稱。

需要注意的是,如果新路徑已經(jīng)存在(例如,文件/文件夾的新名稱),它將被覆蓋。因此,請確保不要錯誤地覆蓋現(xiàn)有文件/文件夾。

向文件中添加內(nèi)容

我們還可以使用 appendFile 方法向現(xiàn)有文件添加新內(nèi)容。

如果比較 writeFileappendFile 這兩種方法,我們可以發(fā)現(xiàn)它們是相似的。傳遞文件路徑、內(nèi)容和回調(diào)。

fs.appendFile(filePath, '\nAll work and no play makes Jack a dull boy!', err => {
  if (err) throw err
  
  console.log('All work and no play makes Jack a dull boy!')
})

到此,相信大家對“node中的fs模塊怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI