在node中,fs模組指的是“檔案系統模組”,是用來操作檔案的模組。 fs模組的API大都提供三種操作方式:1、同步操作檔:程式碼會被阻塞,不會繼續執行;2、非同步回呼函數操作檔:程式碼不會被阻塞,需要傳入回呼函數,當取得到結果時,回呼函數執行;3、非同步Promise操作檔:程式碼不會被阻塞,透過fs.promises呼叫方法操作,會傳回一個Promise。
本教學操作環境:windows7系統、nodejs16版,DELL G3電腦。
檔案系統模組(簡稱 fs)讓我們可以存取電腦上的檔案系統並與之互動。
fs 模組是 Node.js 官方提供的、用來操作檔案的模組。它提供了一系列的方法和屬性,用來滿足使用者對檔案的操作需求。
fs.readFile() 方法,用來讀取指定檔案中的內容
fs.writeFile() 方法,用來向指定的檔案中寫入內容如果要在JavaScript 程式碼中
#如何使用 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模組的檔案操作一般支援同步與非同步兩種API,非同步又包含了回呼函數與promsie的形式。同步一般後面帶sync字樣。
fs模組的API大都提供三種操作方式:
同步操作檔:程式碼會被阻塞,不會繼續執行
-
#非同步回呼函數操作檔:程式碼不會被阻塞,需要傳入回呼函數,當取得到結果時,回呼函數執行
非同步Promise操作檔:程式碼不會被阻塞,透過fs.promises呼叫方法操作,會傳回一個Promise,可以透過then、catch進行處理。
要注意的是,預設情況下,所有 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()
傳回目前工作目錄。現在您已經有了檔案路徑,可以讀取檔案的內容了。
在檔案中寫以下程式碼:
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!') })
上面的代码片段演示了如何向现有文件添加新内容。如果运行应用程序并打开文件,您应该会看到其中的新内容。
更多node相关知识,请访问:nodejs 教程!
以上是node中的fs模組是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

React受歡迎的原因包括其性能優化、組件復用和豐富的生態系統。 1.性能優化通過虛擬DOM和diffing機制實現高效更新。 2.組件復用通過可複用組件減少重複代碼。 3.豐富的生態系統和單向數據流增強了開發體驗。

React是構建動態和交互式用戶界面的首選工具。 1)組件化與JSX使UI拆分和復用變得簡單。 2)狀態管理通過useState鉤子實現,觸發UI更新。 3)事件處理機制響應用戶交互,提升用戶體驗。

React是前端框架,用於構建用戶界面;後端框架用於構建服務器端應用程序。 React提供組件化和高效的UI更新,後端框架提供完整的後端服務解決方案。選擇技術棧時需考慮項目需求、團隊技能和可擴展性。

HTML和React的關係是前端開發的核心,它們共同構建現代Web應用的用戶界面。 1)HTML定義內容結構和語義,React通過組件化構建動態界面。 2)React組件使用JSX語法嵌入HTML,實現智能渲染。 3)組件生命週期管理HTML渲染,根據狀態和屬性動態更新。 4)使用組件優化HTML結構,提高可維護性。 5)性能優化包括避免不必要渲染,使用key屬性,保持組件單一職責。

React是構建交互式前端體驗的首選工具。 1)React通過組件化和虛擬DOM簡化UI開發。 2)組件分為函數組件和類組件,函數組件更簡潔,類組件提供更多生命週期方法。 3)React的工作原理依賴虛擬DOM和調和算法,提高性能。 4)狀態管理使用useState或this.state,生命週期方法如componentDidMount用於特定邏輯。 5)基本用法包括創建組件和管理狀態,高級用法涉及自定義鉤子和性能優化。 6)常見錯誤包括狀態更新不當和性能問題,調試技巧包括使用ReactDevTools和優

React是一個用於構建用戶界面的JavaScript庫,其核心是組件化和狀態管理。 1)通過組件化和狀態管理簡化UI開發。 2)工作原理包括調和和渲染,優化可通過React.memo和useMemo實現。 3)基本用法是創建並渲染組件,高級用法包括使用Hooks和ContextAPI。 4)常見錯誤如狀態更新不當,可使用ReactDevTools調試。 5)性能優化包括使用React.memo、虛擬化列表和CodeSplitting,保持代碼可讀性和可維護性是最佳實踐。

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

React組件可以通過函數或類定義,封裝UI邏輯並通過props接受輸入數據。 1)定義組件:使用函數或類,返回React元素。 2)渲染組件:React調用render方法或執行函數組件。 3)復用組件:通過props傳遞數據,構建複雜UI。組件的生命週期方法允許在不同階段執行邏輯,提升開發效率和代碼可維護性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能