一、最一般的方法:
const fs = require('fs');
// 默認情況下將創(chuàng)建或覆蓋目標文件依鸥。
fs.copyFile('源文件.txt', '目標文件.txt', (err) => {
if (err) throw err;
console.log('源文件已拷貝到目標文件');
});
二黄橘、開子進程復制
const fs = require('fs');
const childProcess=require('child_process')
//子進程+回調
childProcess.exec('cp abc.txt abc8.txt',(err)=>{
if(!err) console.log("復制成功")
})
//子進程+ChildProcess
let cp=childProcess.spawn('cp',['abc.txt','abc8.txt'])
cp.stderr.on('data',function (err) {
console.log("文件復制失敗",err.toString())
})
cp.on('close',function (code) {
if(code==0) console.log("文件復制成功兆览!")
})
三、使用Buffer的方式
const fs=require('fs')
fs.readFile("abc.txt",function (err,chunk) {
if(!err) fs.writeFile('abc1.txt',chunk,function (err) {
if(!err) console.log("文件復制完成")
})
})
四塞关、使用輸入輸出流的方式
const fs=require('fs')
let inputStream=fs.createReadStream('abc.txt');
let outStream=fs.createWriteStream('abc2.txt');
inputStream.on('data',function (chunk) {
outStream.write(chunk)
})
inputStream.on('end',function () {
inputStream.close()
outStream.close()
console.log("文件復制完成 ")
})
此方法比較問題在于抬探,沒有考慮到back-pressure
五、解決背壓問題的改良方法:
const fs=require('fs')
let inputStream=fs.createReadStream('abc.txt');
let outStream=fs.createWriteStream('abc2.txt');
//輸出流的緩存被放光時帆赢,恢復輸入流的讀取工作
outStream.on('drain',function () {
inputStream.resume();
})
inputStream.on('data',function (chunk) {
//寫入緩存數(shù)據(jù)小压,并嗅探是否以有繼續(xù)寫入
let ok=outStream.write(chunk);
if(!ok) inputStream.pause();//如果不可以,暫停輸入流的工作
})
inputStream.on('end',function () {
inputStream.close()
outStream.close()
console.log("文件復制完成")
})
六椰于、“五”的語法糖形式
const fs=require('fs')
let inputStream=fs.createReadStream('abc.txt');
let outStream=fs.createWriteStream('abc2.txt');
inputStream.pipe(outStream)
inputStream.on('end',function () {
console.log("文件復制完成")
})
此時將自動協(xié)調工作的同步怠益,及關閉流的問題。