/

nodeJS 中的 fs module 介紹

前言

在學習任何一個語言一定都會遇到檔案讀寫,在 nodeJS 中的檔案讀寫幾乎都能透過 fs 這個 module 來完成。

而且在 fs API 中有這麼一段話

All file system operations have synchronous and asynchronous forms.

對於開發者來說實在是非常棒,不像有些 module 同步與異步是分開成兩個不同的 module。

常用操作

讀取文件

以下要注意第二個參數要指定編碼,否則印出來會是 raw data 的形式:

1
<Buffer 68 65 6c 6c 6f 2c 20 77 6f 72 6c 64 0a>
1
2
3
4
5
6
7
8
9
const fs = require('fs')

//asynchronous
fs.readFile('./a.txt', 'utf8', (err, data) => {
console.log(data)
})
//synchronous
let data = fs.readFileSync('./a.txt', 'utf8')
console.log(data)

寫入文件

writeFile

寫入文件時,第一個參數為路徑,第二個參數為寫入字串,第三個參數為編碼(預設為 utf-8)

1
2
3
4
5
6
7
//asynchronous
fs.writeFile('./b.txt', 'hi', (err) => {
if (err) throw err
console.log('done.')
}
//synchronous
fs.writeFileSync('./b.txt', 'hi')

appendFile

若無此檔案,會自動建立,若有,則附加至尾端
(第一個參數為路徑,第二個參數為寫入字串,第三個參數為編碼(預設為 utf-8))

1
2
3
4
5
6
7
8
9
10
11
fs.appendFile('./c.txt', 'append txt', (err) => {
if (err) throw err
console.log('done.')
})
//同樣也有 writeFileSync
try {
fs.appendFileSync('message.txt', 'data to append');
console.log('The "data to append" was appended to file!');
} catch (err) {
/* Handle the error */
}

開檔案

以上 API 第一參數也可以放 fd,用 open 可以設定詳細權限並且回傳 fd。

1
2
3
4
5
6
7
8
fs.open('./a.txt', 'r',(err, fd) => {
if (err) throw err
fs.readFile(fd, 'utf-8', (err, data) => {
if (err) throw err
console.log(data)
})
})
//fs.open 也一樣有同步版本,在此不贅述

刪檔案

1
2
3
4
5
fs.unlink('a.txt', (err) => {
if (err) throw err
console.log('deleted.')
})
//fs.unlink 也一樣有同步版本,在此不贅述