1. 程式人生 > >Electron 基礎教程-7.3 Node fs模組檔案與目錄操作

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)

各個引數的解釋如下表:

7.2t

FS模組的flag引數支援多種檔案訪問方式,如下表所示:
7.3t

獲取檔案資訊

通過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)

引數解釋如下:

7.4t

基本用法如下所示:

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模組的用法請參考官方文件。