[TOC]
>[warning] 参照api版本为10.16.2
`fs`,即`filesystem`,该模块提供本地文件的读写能力。这个模块几乎对所有操作提供异步和同步两种操作方式,以供选择
## 1. writeFile(),writeFileSync() 写入文件
* `writeFile(file, data[, options], callback)` 异步写入文件
~~~
fs.writeFile('./test.txt','this is a test', function(err) {
if (err) {
throw err
}
})
~~~
* writeFileSync(file, data[, options])
异步写入的同步版本
## 2. readFile(), readileSync() 读取数据
* `readFile(path[, options], callback)` 异步读取数据
~~~
var cwd = process.cwd()
console.log('cwd', cwd)
fs.readFile('./images/风景1.jpg', function(err, buffer) {
if (err) {
throw err
}
console.log('buffer', buffer)
})
~~~
path: 文件路径,可以是绝对路径,也可以是相对路径。相对路径则必须是当前进程所在的路径(`process.cwd()`);
options: 可选填,默认配置对象为 { encoding: null, flag: 'r' } 即文件编码为null,读取模式为只读。不填写,readFile默认返回Buffer实例,否则返回字符串
callback: 读取完成的回调函数,该函数的第一个参数为发生错误时的错误对象,第二个参数代表文件内容
* `readileSync(path[, options])` 同步读取数据
异步读取的同步版本
## 3. mkdir(), mkdirSync() 创建目录
* `mkdir(path[, options], callback)`,异步创建目录
~~~
var fs = require('fs')
// 无论该目录是否存在temp和temp/test
fs.mkdir('./tmp/test/t', { recursive: true }, function(err) {
if (err) {
throw err
}
});
~~~
* `mkdirSync(path[, options])`
异步创建目录的同步版本
## 4. readdir(),readdirSync() 读取目录
* readdir方法读取目录内容,返回一个包含子目录名称的数组
~~~
fs.readdir('./tmp/test/', function(err, files) {
if (err) {
throw err
}
console.log('files, ', files)
})
~~~
* readdirSync(path[, options])
异步读取目录的同步版本
## 5. stat() 判断正在处理的内容类型
~~~
fs.stat('./tmp/test/t', function(err, stats) {
if (err) {
throw err
}
console.log('stats, ', stats)
})
~~~
* fs.stat(path[, options], callback),该方法的参数是一个文件或目录,它产生一个对象,该对象包含了该文件或目录的具体信息。我们往往通过该方法,判断正在处理的到底是一个文件,还是一个目录
## 6. watchfile(),unwatchfile() 监听/解除监听文件
* `watchfile(filename[, options], listener)`,该方法监听一个文件,每当访问文件时都会调用`listener`回调。
~~~
fs.watchFile('test.text', function(curr, prev) {
console.log(`当前的最近修改时间是: ${curr.mtime}`);
console.log(`之前的最近修改时间是: ${prev.mtime}`);
})
~~~
* `unwatchfile(filename[, listener])`方法用于解除对文件的监听
## 7. createReadStream(),createWriteStream() 打开/写入数据
~~~
var fs = require('fs');
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
var last = 0;
while (index > -1) {
var line = remaining.substring(last, index);
last = index + 1;
func(line, index);
index = remaining.indexOf('\n', last);
}
remaining = remaining.substring(last);
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining, 'last');
}
});
}
function func(data, index) {
console.log(`${index}: ${data}`);
}
var input = fs.createReadStream('./lines.txt');
readLines(input, func);
~~~
* createReadStream(path[, options]),该方法往往用于打开大型的文本文件,创建一个读取操作的数据流。所谓大型文本文件,指的是文本文件的体积很大,读取操作的缓存装不下,只能分成几次发送,每次发送会触发一个data事件,发送结束会触发end事件
* createWriteStream方法创建一个写入数据流对象,该对象的write方法用于写入数据,end方法用于结束写入操作
* `createWriteStream`方法和`createReadStream`方法配合,可以实现拷贝大型文件