這篇文章主要介紹“Node.js怎么使用文件系統模塊”,在日常操作中,相信很多人在Node.js怎么使用文件系統模塊問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Node.js怎么使用文件系統模塊”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
文件系統模塊(簡稱 fs
)允許我們訪問計算機上的文件系統并與之交互。
使用 fs
模塊,我們可以執行以下操作:
創建文件和目錄
修改文件和目錄
刪除文件和目錄
讀取文件和目錄的內容
...
建議:文件系統模塊比較復雜,建議查看官方文檔,你可以看到所有的方法。
本文將向您介紹最常見和最有用的 fs
方法。事不宜遲,讓我們看看這些方法是什么。
fs
文件系統模塊是一個核心的 Node.js 模塊。這意味著我們不必安裝它。我們唯一需要做的就是將 fs
模塊導入到自己的文件中。
因此,在文件頂部添加:
const fs = require('fs')
現在,我們可以使用前綴 fs
從文件系統模塊調用任何方法。
或者,我們可以只從 fs
API 導入所需的方法,如下所示:
const { writeFile, readFile } = require('fs')
注意:為了方便起見,我們還需要導入
path
模塊。它是另一個核心 Node.js 模塊,它允許我們使用文件和目錄路徑。
導入 fs
模塊后,在文件中添加:
const path = require('path')
使用文件系統模塊時,path
模塊不是必需的。但它對我們有很大的幫助!
需要注意的是,默認情況下,所有 fs
方法都是異步的。但是,我們可以通過在方法末尾添加 Sync
來使用同步版本。
例如,writeFile
方法的同步版本為 writeFileSync
。同步方法將同步的完成代碼,因此它們阻塞了主線程。阻塞 Node.js 中的主線程被認為是不好的做法,我們不應該這么做。
因此,以下我們都將使用文件系統模塊中的異步方法。
要從 Node.js 應用程序寫入文件,請使用 writeFile
方法。
writeFile
方法至少接受以下參數:
文件名
內容
回調
如果指定的文件已經存在,它會將舊內容替換為您作為參數提供的內容。如果指定的文件不存在,則創建一個新文件。
導入 fs
和 path
模塊后,在文件中編寫以下代碼:
fs.writeFile('content.txt', 'All work and no play makes Jack a dull boy!', err => { if (err) throw err process.stdout.write('創建成功!') })
上面的代碼將創建了一個名為 content.txt
的新文件,并添加了文本 All work and no play makes Jack a dull boy!
作為內容。如果存在任何錯誤,回調函數將拋出該錯誤。否則,它將向控制臺輸出文件創建成功。
writeFile
還有其他變體,例如:
fs.writeFileSync
— 同步寫入文件
fsPromises.writeFile
— 使用基于 Promise 的 API 寫入文件
查看此要點:https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92
在讀取文件之前,需要創建并存儲文件的路徑。path
模塊的路徑在這里很方便。
使用 join
模塊中的 path
方法,您可以創建文件路徑,如下所示:
const filePath = path.join(process.cwd(), 'content.txt')
第一個參數 process.cwd()
返回當前工作目錄?,F在您已經有了文件路徑,可以讀取文件的內容了。
在文件中編寫以下代碼:
fs.readFile(filePath, (error, content) => { if (error) throw error process.stdout.write(content) })
readFile
方法至少接受兩個參數:
文件的路徑
回調
如果有錯誤,它會拋出一個錯誤。否則,它會在終端中輸出文件內容。
readFile
還有其他變體,例如:
fs.readFileSync
— 同步寫入文件
fsPromises.readFile
— 使用基于 Promise 的 API 寫入文件
查看此要點:https://gist.github.com/catalinpit/badc2a539a44412892a0e05a9575d54d
在目錄中顯示文件與讀取文件內容非常相似。但是,不是傳遞文件路徑,而是傳遞當前工作目錄(我們可以傳遞任何其他目錄)。
然后,傳遞一個回調函數來處理響應。在文件中編寫以下代碼:
fs.readdir(process.cwd(), (error, files) => { if (error) throw error console.log(files) })
到目前為止,我們只使用 process.stdout.write
將內容輸出到終端。但是,您可以簡單地使用 console.log
,就像上面的代碼片段一樣。
如果運行該應用程序,我們應該會得到一個包含目錄中所有文件的數組。
查看此要點:https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e
文件系統模塊有一種方法,允許您刪除文件。但是,需要注意的是,它只適用于文件,不適用于目錄。
當以文件路徑作為參數調用 unlink
方法時,它將刪除該文件。將以下代碼段添加到文件中:
fs.unlink(filePath, error => { if (error) throw error console.log('文件已刪除!') })
如果您重新運行代碼,您的文件將被刪除!
查看此要點:https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e
我們可以使用 mkdir
方法異步創建目錄。在文件中編寫以下代碼:
fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => { if (err) throw err console.log('已成功創建文件夾!') })
首先,要在當前工作目錄中創建一個新文件夾。如前所述,您可以使用 cwd()
方法從 process
對象獲取當前工作目錄。
然后,傳遞要創建的一個或多個文件夾。但是,這并不意味著您必須在當前工作目錄中創建新文件夾。你可以在任何地方創建它們。
現在,第二個參數是遞歸選項。如果未將其設置為 true
,則無法創建多個文件夾。如果將 recursive
選項設置為 false
,上述代碼將給出一個錯誤。試試看!
但是,如果您只想創建一個文件夾,則無需將 recursive
選項設置為 true
。
以下代碼可以正常工作!
fs.mkdir(`${process.cwd()}/myFolder`, err => { if (err) throw err console.log('已成功創建文件夾!') });
因此,我想強調使用 recursive
。如果要在文件夾中創建文件夾,則需要將其設置為 true
。它將創建所有文件夾,即使它們不存在。
另一方面,如果您只想創建一個文件夾,可以將其保留為 false
。
查看此要點:https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066
刪除目錄的邏輯類似于創建目錄。如果您查看為創建目錄而編寫的代碼和下面的代碼,您會發現相似之處。
因此,在文件中編寫以下代碼:
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => { if (err) throw err console.log('已成功刪除文件夾!') })
使用文件系統模塊中的 rmdir
方法,并傳遞以下參數:
要刪除的目錄
遞歸屬性
回調
如果將 recursive
屬性設置為 true
,它將刪除文件夾及其內容。請務必注意,如果文件夾中包含內容,則需要將其設置為 true
。否則,您將得到一個錯誤。
以下代碼段僅在文件夾為空時有效:
fs.rmdir(`${process.cwd()}/myFolder/`, err => { if (err) throw err console.log('已成功刪除文件夾!') })
如果 myFolder
中有其他文件和/或文件夾,如果未傳遞 { recursive: true }
,則會出現錯誤。
知道何時使用 recursive
選項以及何時不避免問題是很重要的。
查看此要點:https://gist.github.com/catalinpit/a8cb6aca75cef8d6ac5043eae9ba22ce
使用 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
方法包含三個參數:
第一個參數是現有的文件夾/文件
第二個參數是新名稱
回調
因此,要重命名文件或目錄,我們需要傳遞當前文件/目錄的名稱和新名稱。運行應用程序后,應更新目錄/文件的名稱。
需要注意的是,如果新路徑已經存在(例如,文件/文件夾的新名稱),它將被覆蓋。因此,請確保不要錯誤地覆蓋現有文件/文件夾。
查看此要點:https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e
我們還可以使用 appendFile
方法向現有文件添加新內容。
如果比較 writeFile
和 appendFile
這兩種方法,我們可以發現它們是相似的。傳遞文件路徑、內容和回調。
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!') })
上面的代碼片段演示了如何向現有文件添加新內容。如果運行應用程序并打開文件,您應該會看到其中的新內容。
查看此要點:https://gist.github.com/catalinpit/7c8d40db53dea9e6831f9ee89d92475c
到此,關于“Node.js怎么使用文件系統模塊”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。