【Node.js】文件操作

1. 监听文件变化

跟文件相关的内容被包含在node.js内置的文件模块‘fs’中。

const fs = require('fs');

监听文件变化的方法是watch(),其中包含两个参数,第一个参数string,代表文件名,第二个参数是文件变化时需要执行的回调函数。

fs.watch('filename',() => console.log('file changed!'));

接收命令行参数

process是一个全局对象,argv是一个数组,保存命令行输入的参数。

node app.js target.txt
const filename = process.argv[2]; //target.txt

创建子进程

require(‘child_process’)语句返回一个child process模块。

1.spawn()方法

spawn()的第一个参数是需要执行命令的名称,第二个参数是命令行的参数数组。返回一个ChildProcess 对象。

它的stout、stdin、stderr属性都是Stream,可以用作输入和输出。

const spawn = require('child_process').spawn;
const ls = spawn('ls',['-l','-h','filename']);

2.pipe()方法

pipe()方法可以把子进程的输出内容直接传送到标准输出流。

ls.stdout.pipe(process.stdout);

使用EventEmitter获取数据

可以通过EventEmitter触发事件或响应事件。Stream类继承自EventEmitter。

ls.stdout.on('data',chunk => output += chunk);

由于Stream类继承自EventEmitter,所以能够监听到子进程标准输出流事件。on方法用于给指定事件添加事件监听函数。上述语句说明监听的是data事件。

data事件会将buffer对象作为参数传给回调函数,每拿到一份数据,就把buffer(chunk)里的数据添加到output变量。

注:

由于把数据从二进制复制到Node.js非常费时,尽管string操作更便捷,但还是应该尽可能直接操作buffer。

2. 异步读/写文件

Node.js有多种读写方式,最简单的是一次性读取或写入整个文件。另外的方式是通过Stream读/写流和使用Buffer存储内容。

一次性读写

readFile()方法可以一次性读取文件内容,第一个参数是文件名(string),第二个参数是data(一个buffer对象)。

const fs = require('fs');
fs.readFile('target.txt',(err,data) =>{
    
    
    if(err){
    
    
        throw err;
    }
    console.log(data.toString());
});

写入数据是writeFile(),共三个参数,第一个是文件名,第二个是字符串数据,第三个是err。

const fs = require('fs');
fs.writeFile('target.txt','hello world',(err) => {
    
    
    	throw err;
	}
});

创建读/写流

分别用fs.creatReadStream()和fs.fs.creatWriteStream()来创建读、写流。

fs.createReadStream(process.argv[2]).pipe(process.stdout);

process.stdout.write()同样也是一个数据输出方式,等同于console.log。

fs.createReadStream(process.argv[2]).on('data',chunk=>process.stdout.write(chunk));

猜你喜欢

转载自blog.csdn.net/weixin_39006917/article/details/108658353