nodejs 文件复制 fs.createReadSream&fs.createWriteStream&pipe

本文通过一个实际示例,详细讲解了如何在Node.js中利用fs模块的createReadStream和createWriteStream方法以及pipe函数进行文件复制操作。通过创建可读流读取源文件,然后通过pipe将数据流导向可写流,从而实现文件内容的高效复制。
摘要由CSDN通过智能技术生成

文件结构:

e:nodejs/filecopy/demo.js

e:nodejs/filecopy/1/result.txt

e:nodejs/filecopy/2


demo.js:

var fs=require('fs');

var rOption={
	flags:"r",
	encoding:null,
	mode:0666
}

var wOption = {
  flags: 'a',
  encoding: null,
  mode: 0666   
}

var fileReadStream=fs.createReadStream('filecopy/1/result.txt',rOption);
var fileWriteStream = fs.createWriteStream('filecopy/2/new_result.txt',wOption);

fileReadStream.on('data',function(data){
	fileWriteStream.write(data);
});

fileReadStream.on('end',function(){
	console.log("readStream end");
	fileWriteStream.end();
});
启动运行可实现将result.txt从e:nodejs/filecopy/1/复制到e:nodejs/filecopy/2/下。


这里再补充在流中非常有用的一个函数:pipe,它以用来把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。使用起来非常方便,依然实现上例中的功能:
demo.js:

var fs = require('fs');

var fileReadStream=fs.createReadStream('filecopy/1/result.txt');
var fileWriteStream = fs.createWriteStream('filecopy/2/new_result.txt');
fileReadStream.pipe(fileWriteStream);

fileWriteStream.on('close',function(){
  console.log('copy over');  
});


Node.js 中,可以使用 `child_process` 模块创建子进程,然后在子进程中利用 `process.send()` 方法将数据传回给主进程。 具体实现步骤如下: 1. 在主进程中创建子进程,并通过 `child_process.fork()` 方法启动一个 Node.js 脚本。 ```javascript const { fork } = require('child_process'); const child = fork('child.js'); ``` 2. 在子进程中,利用 `fs.createReadStream()` 方法创建一个可读流,并通过 `pipe()` 方法将数据传输到 `process.stdout` 中。 ```javascript const fs = require('fs'); const readStream = fs.createReadStream('file.txt'); readStream.pipe(process.stdout); ``` 3. 在子进程中,监听 `readStream` 的 `end` 事件,当数据传输完成后,通过 `process.send()` 方法将数据传回给主进程。 ```javascript readStream.on('end', () => { process.send({ data: '数据传输完成' }); }); ``` 4. 在主进程中,监听子进程的 `message` 事件,当子进程通过 `process.send()` 方法发送数据时,就可以在主进程中接收到。 ```javascript child.on('message', (message) => { console.log(message); // { data: '数据传输完成' } }); ``` 完整代码示例: 主进程代码(`index.js`): ```javascript const { fork } = require('child_process'); const child = fork('child.js'); child.on('message', (message) => { console.log(message); // { data: '数据传输完成' } }); ``` 子进程代码(`child.js`): ```javascript const fs = require('fs'); const readStream = fs.createReadStream('file.txt'); readStream.pipe(process.stdout); readStream.on('end', () => { process.send({ data: '数据传输完成' }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值