Electron 基礎教程-7.3 Node fs模組檔案與目錄操作
A Brief Look at Node’s FS Module
讀寫檔案操作呼叫了Node的核心模組:fs
(File System)。這個模組的每個方法都提供了同步和非同步兩種版本,通常選擇非同步方式編寫程式碼。非同步方式就能防止打斷使用者互動操作,因為程式碼的執行不會被阻塞。fs
模組基本的操作如下:
* 開啟或建立檔案
* 獲取檔案狀態和資訊
* 寫檔案
* 讀檔案
* 關閉檔案
* 刪除檔案
使用FS
模組之前首先要匯入它:
const fs = require('fs')
開啟檔案
通常情況下,我們不需要手動開啟和關閉工作檔案,標準讀寫命令就可以自動化處理。但如果想操作流檔案或訪問檔案的特定塊,你就需要使用如下方式正確處理了:
fs.open(path, flags[, mode], callback)
各個引數的解釋如下表:
FS
模組的flag
引數支援多種檔案訪問方式,如下表所示:
獲取檔案資訊
通過fs.stats
方法可以獲取檔案資訊。這個方法可以確定是檔案還是一個目錄。如下程式碼段進入某個目錄,然後輸出了檔案資訊:
fs.stat(filePath, function (err, stats) {
if (err) {
return console.error(err)
}
console.log(stats)
console.log ("Got file info successfully!")
// Check file type
console.log("isFile ? " + stats.isFile())
console.log("isDirectory ? " + stats.isDirectory())
})
輸出檔案資訊:
fs.Stats
atime: Mon Mar 13 2017 15:13:31 GMT-0700 (PDT)
birthtime: Mon Mar 13 2017 15:09:16 GMT-0700 (PDT)
blksize: 4096blocks: 8
ctime: Mon Mar 13 2017 15:13:12 GMT-0700 (PDT)
dev: 16777220
gid: 1859252656ino: 30007351
mode: 33188
mtime: Mon Mar 13 2017 15:13:12 GMT-0700 (PDT)
nlink: 1
rdev: 0
size: 603
uid: 224974590
Got file info successfully!
isFile ? true
isDirectory ? false
寫檔案
fs.writeFile
方法可以對檔案進行寫操作:
fs.writeFile(file, data[, options], callback)
引數解釋如下:
基本用法如下所示:
fs.writeFile(fileName, content, function (err) {
if (err) {
console.log("An error occurred creating the file " + err.message)
} else {
console.log("The file has been successfully saved")
}
})
讀檔案
fs.readFile
讀取使用者本地檔案有兩種方式:讀取完整檔案和讀取檔案的一部分,讀取完整檔案是最常用的操作。基本用法如下:
fs.readFile(filepath, 'utf-8', function (err, data) {
if (err) {
alert("An error occurred reading the file :" + err.message)
return
}
//Display the file contents
console.log("The file content is : " + data)
})
如果想用同步方式讀取檔案要使用fs.readFileSync()
方法。關於如何讀取檔案的一部分可以參考官方文件。
刪除檔案
fs.unlink()
方法能夠刪除使用者電腦上的檔案。由於這個操作基於標準POSIX方法(Portable Operating System Interface of UNIX,用於操作檔案和目錄的標準命令集),所以刪除方法叫做unlink。可以使用fs.existsSync()
測試檔案是否還存在:
if (fs.existsSync(filePath)) {
fs.unlink(filepath, function (err) {
if (err) {
console.log("An error ocurred updating the file" + err.message)
return
}
console.log("File succesfully deleted")
})
}
監測檔案更新
另一個有用的方法是fs.watch()
,用以監測檔案更新:
fs.watch(fileName, {
persistent: true
}, function(event, filename) {
console.log(event + " event occurred on " + filename)
})
目錄操作
上面的例子都是對檔案的操作,fs
模組同樣支援目錄操作。
新建目錄
新建目錄使用fs.mkdir()
方法:
fs.mkdir(myDir, function(err){
if (err) {
console.log('mkdir err:'+err)
}
console.log('New Directory Created')
})
讀取目錄資訊
使用fs.readdir()
或同步的fs.readdirSync()
方法能夠讀取目錄的資訊。呼叫的結果是一個當前目錄下檔案和子目錄的字串陣列。例如在electron-quick-start
目錄下呼叫該方法:
fs.readdir('./', function(err, files){
if (err) {
console.log(‘readdir err:'+err)
return
}
console.log(files)
})
得到的結果為:
[".git", ".gitignore", "LICENSE.md", "README.md", "index.html", "main.js", "node_modules", "package.json", "renderer.js"]
刪除目錄
使用fs.rmdir()
或同步的fs.rmdirSync()
方法能夠刪除目錄,並且不會返回資訊:
fs.rmdir(myDir, function(err){
if (err) {
console.log('rmdir err:'+err)
return
}
console.log('deleted the directory')
})
更多關於Nodefs
模組的用法請參考官方文件。