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)

各个参数的解释如下表:

Electron 基础教程-7.3 Node fs模块文件与目录操作_第1张图片

FS模块的flag参数支持多种文件访问方式,如下表所示:
Electron 基础教程-7.3 Node fs模块文件与目录操作_第2张图片

获取文件信息

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

参数解释如下:

Electron 基础教程-7.3 Node fs模块文件与目录操作_第3张图片

基本用法如下所示:

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模块的用法请参考官方文档。


你可能感兴趣的:(Electron,JavaScript)