如何使用 Node 來操作文件夾

Node.js 的 fs 核心模組提供了很多方便的方法,可以用來處理文件夾。

驗證文件夾是否存在

使用 fs.access() 方法來檢查文件夾是否存在,並且 Node 是否有權限訪問。

創建新的文件夾

使用 fs.mkdir()fs.mkdirSync() 方法來創建新的文件夾。

const fs = require('fs')

const folderName = '/Users/flavio/test'

try {
 if (!fs.existsSync(folderName)){
 fs.mkdirSync(folderName)
 }
} catch (err) {
 console.error(err)
}

讀取文件夾內容

使用 fs.readdir()fs.readdirSync 方法來讀取文件夾內容。

以下程式碼示範了如何讀取文件夾內容,包括文件和子文件夾,並返回它們的相對路徑。

const fs = require('fs')
const path = require('path')

const folderPath = '/Users/flavio'

fs.readdirSync(folderPath)

你可以獲取完整的路徑:

fs.readdirSync(folderPath).map(fileName => {
 return path.join(folderPath, fileName)
}

你也可以過濾結果,只返回文件,排除文件夾:

const isFile = fileName => {
 return fs.lstatSync(fileName).isFile()
}

fs.readdirSync(folderPath).map(fileName => {
 return path.join(folderPath, fileName)
}).filter(isFile)

重命名文件夾

使用 fs.rename()fs.renameSync() 方法來重命名文件夾。第一個參數是當前路徑,第二個參數是新路徑。

const fs = require('fs')

fs.rename('/Users/flavio', '/Users/roger', err => {
 if (err) {
 console.error(err)
 return
 }
 //成功完成
})

fs.renameSync() 是同步版本:

const fs = require('fs')

try {
 fs.renameSync('/Users/flavio', '/Users/roger')
} catch (err) {
 console.error(err)
}

刪除文件夾

使用 fs.rmdir()fs.rmdirSync() 方法來刪除文件夾。

刪除內容不為空的文件夾可能比較複雜。

在這種情況下,我建議安裝 fs-extra 模組,它非常受歡迎且得到了很好的維護,它是 fs 模組的完全兼容替代,提供了更多的功能。

使用以下命令來安裝它:

npm install fs-extra

然後像這樣使用:

const fs = require('fs-extra')

const folder = '/Users/flavio'

fs.remove(folder, err => {
 console.error(err)
})

也可以使用 Promise:

fs.remove(folder).then(() => {
 //成功完成
}).catch(err => {
 console.error(err)
})

或者使用 async/await:

async function removeFolder(folder) {
 try {
 await fs.remove(folder)
 //成功完成
 } catch (err) {
 console.error(err)
 }
}

const folder = '/Users/flavio'
removeFolder(folder)