通过程序来介绍Node.js 的几个文件读写和事件监听API
- 使用 fs 模块实现文件读取程序
//导入模块
const fs = require("fs");
const fileName = "foo.txt";
//判断文件或文件夹是否存在
fs.exists(fileName, (exists) => {
if (exists) {
//如果存在,查看文件或文件夹的属性
fs.stat(fileName, (error, stats) => {
if (error) {
throw error;
}
//如果是文件就读取文件
if (stats.isFile()) {
fs.readFile(fileName, "utf8", (error, data) => {
if (error) {
throw error;
}
console.log(data);
})
}
})
}
})
fs.exists()这个了解一下就好了,Node.js官方现在都不建议使用这个东西了,建议用 fs.stat() 或 fs.access()来替换。这个方法的功能就是检查给定的文件系统路径是否存在。此方法只返回一个布尔值,这是为什么不推荐使用这个方法,而推荐使用fs.access()的一个重要原因。fs.stat()可以查看文件或文件夹的属性,stats.isFile()判断这个是不是文件。fs.readFile()是用来读取文件的。与fs.readFile()功能差不多的还有,fs.readFileSync()
,只是前者是异步的,而后者是同步的。同步操作的好处是简单,但是当读文件时就不能再进行其他操作了,而异步读取不需要等待,但是代码比较复杂。
2、 使用 fs和 path 模块实现文件读取和写入
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname, '/data/customers.csv'), {
encoding: 'utf-8'
},
(err, data) = >{
if (err) {
console.error(err) process.exit(1)
} else {
console.log(data)
}
})
__dirname
总是指向当前执行的js文件的绝对路径,所以使用path.join()可以来拼接文件路径。process.exit(退出码) 是用来终止进程的。如果退出码为空表示退出码为'0'或者'process.exitCode'.这些代表以成功状态退出。如果退出码为1,就是让进程强制退出,即便还有操作未完成。
const fs = require('fs')
fs.writeFile('message.txt', 'Hello World!', (err) = >{
if (err) {
console.error(err) process.exit(1)
} else {
console.log('Writing is done.')
}
})
调用fs.writeFile()来将Hello World!写入文件。第一个参数填文件路径,可以是相对路径,也可以是绝对路径,这里是相对路径。第二个参数是要写入的内容,第三个参数可用可不用,是编码类型,第四个参数是回调函数。
3、 编写事件侦听程序
const events = require("events");
const emitter = new events.EventEmitter();
const username = "colin";
const password = "password";
// an event listener
emitter.on("userAdded", (username, password) = >{
console.log("Added user " + username);
});
// add the user
// then emit an event
emitter.emit("userAdded", username, password);
emitter.on()是用来监听事件的,第一个参数是事件的名称,第二个参数是回调函数。
emitter.emit()可以用来触发事件,第一个参数是事件名称,后面的参数都是传递的参数名称。