iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
自我挑戰組

30 天 Node.js 探索:基礎、進階與實踐系列 第 5

Day 5: Node.js 內建模組:fs 檔案系統

  • 分享至 

  • xImage
  •  

接下來要學習該怎麼使用 Node.js 當中的 fs 模組來進行檔案操作,包括讀取、寫入、更新和刪除檔案。

fs 模組介紹

fs(File System)是 Node.js 的內建模組之一,專門用來處理檔案和目錄操作。它的用途就是進行同步或異步的檔案操作。
首先要做的是引入 fs 模組:

js
const fs = require('fs');

讀取檔案

fs.readFile() 用來非同步讀取檔案,並在操作完成後執行回調函數。它的同步版本是 fs.readFileSync()。

js
fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('Error reading file:', err);
    return;
  }
  console.log('File content:', data);
});
  • fs.readFile(): 讀取檔案時,Node.js 不會阻塞其他操作。回調函數在檔案讀取完成後執行。
  • fs.readFileSync(): 同步讀取檔案,阻塞程式碼的執行。
    同步讀取檔案範例:
js
const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);

寫入檔案

fs.writeFile() 用來非同步寫入檔案。如果檔案不存在,則會創建新檔案;如果檔案已存在,則會覆蓋內容。fs.writeFileSync() 是它的同步版本。

js
fs.writeFile('example.txt', 'Hello, Node.js!', (err) => {
  if (err) {
    console.error('Error writing file:', err);
    return;
  }
  console.log('File written successfully');
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20169444IvLO7oDbGT.png
溫馨叮嚀,要以管理員身份執行 Node.js,否則會有權限問題,導致程式錯誤

  • 如果不想覆蓋現有檔案,可以使用 fs.appendFile() 來將內容附加到檔案末尾。
    附加檔案範例:
js
fs.appendFile('example.txt', '\nWelcome to Node.js!', (err) => {
  if (err) {
    console.error('Error appending file:', err);
    return;
  }
  console.log('Content appended successfully');
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20169444GLlpwJyIOX.png

更新檔案

更新檔案最常見的方法就是重新讀取整個檔案內容,修改後再寫回檔案。這可以透過 fs.readFile() 和 fs.writeFile() 結合來完成。
更新檔案內容範例:

js
fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('Error reading file:', err);
    return;
  }

  const updatedContent = data.replace('Node.js', 'JavaScript');
  
  fs.writeFile('example.txt', updatedContent, (err) => {
    if (err) {
      console.error('Error writing file:', err);
      return;
    }
    console.log('File updated successfully');
  });
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20169444yeBhi59LBm.png

刪除檔案

fs.unlink() 用來刪除檔案,fs.unlinkSync() 是它的同步版本。

js
fs.unlink('example.txt', (err) => {
  if (err) {
    console.error('Error deleting file:', err);
    return;
  }
  console.log('File deleted successfully');
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20169444K5y0yZi5jB.png

目錄操作

除了檔案操作,fs 模組還支援目錄的創建、讀取和刪除。
創建目錄: fs.mkdir() 創建目錄,fs.mkdirSync() 為同步版本。

js
fs.mkdir('newDir', { recursive: true }, (err) => {
  if (err) {
    console.error('Error creating directory:', err);
    return;
  }
  console.log('Directory created successfully');
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20169444jyFiJDYt0Q.png
讀取目錄: fs.readdir() 用來讀取目錄中的內容。

js
fs.readdir('.', (err, files) => {
  if (err) {
    console.error('Error reading directory:', err);
    return;
  }
  console.log('Directory contents:', files);
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/201694442JyaOGG1Da.png
刪除目錄: fs.rmdir() 刪除空目錄,fs.rm() 則可以刪除非空目錄。

js
fs.rmdir('newDir', (err) => {
  if (err) {
    console.error('Error deleting directory:', err);
    return;
  }
  console.log('Directory deleted successfully');
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240919/2016944411fbrZXtOv.png

檔案與目錄資訊

可以使用 fs.stat() 來獲取檔案或目錄的相關資訊,如大小、修改時間等。

js
fs.stat('example.txt', (err, stats) => {
  if (err) {
    console.error('Error getting file stats:', err);
    return;
  }
  console.log('File stats:', stats);
});

總結

今天深入探索了 Node.js 的 fs 模組,學習了如何讀取、寫入、更新和刪除檔案,以及進行目錄操作。這些操作是開發應用時處理檔案系統的核心技能,特別是在開發需要大量檔案處理的應用程式時,fs 模組是必備的工具。接下來將繼續探索 Node.js 的其他內建模組,讓可以運用的資源越來越多。


上一篇
Day 4: Node.js 基本語法
下一篇
Day 6: 事件驅動架構與 EventEmitter
系列文
30 天 Node.js 探索:基礎、進階與實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言