读写文件操作调用了Node的核心模块:fs
(File System)。这个模块的每个方法都提供了同步和异步两种版本,通常选择异步方式编写代码。异步方式就能防止打断用户交互操作,因为代码的执行不会被阻塞。fs
模块基本的操作如下:
* 打开或创建文件
* 获取文件状态和信息
* 写文件
* 读文件
* 关闭文件
* 删除文件
使用FS
模块之前首先要导入它:
const fs = require('fs')
通常情况下,我们不需要手动打开和关闭工作文件,标准读写命令就可以自动化处理。但如果想操作流文件或访问文件的特定块,你就需要使用如下方式正确处理了:
fs.open(path, flags[, mode], callback)
各个参数的解释如下表:
通过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
模块的用法请参考官方文档。