在Node.js中實現(xiàn)文件復(fù)制的方法和實例
Node.js 本身并沒有提供直接復(fù)制文件的 API,如果想用 Node.js 復(fù)制文件或目錄,需要借助其他的 API 來實現(xiàn)。復(fù)制單個的文件可以直接用 readFile、writeFile,這樣比較簡便。如果是復(fù)制一個目錄下的所有文件,目錄下可能還包含了子目錄,那么此時就需要用到更高級點的 API 了。
流
流是 Node.js 移動數(shù)據(jù)的方式,Node.js 中的流是可讀/可寫的,HTTP 和文件系統(tǒng)模塊都有用到流。在文件系統(tǒng)中,使用流來讀取文件的時候,對于一個大文件可能并不會一次性讀取完,而是會分好幾次讀取完,讀取的時候會響應(yīng)數(shù)據(jù)事件,在文件沒讀取完的時候就可以對讀取的數(shù)據(jù)進行操作。同理,在寫入流的時候也和讀取時一樣,大文件并不會一次性寫入。這種移動數(shù)據(jù)的方式是非常高效的,尤其是對于大文件而言,使用流比等待將大文件全部讀取完再來操作文件要快得多。
管道
如果想在讀取流和寫入流的時候做完全的控制,可以使用數(shù)據(jù)事件。但對于單純的文件復(fù)制來說讀取流和寫入流可以通過管道來傳輸數(shù)據(jù)。
實際應(yīng)用:
var fs = require( 'fs' ),
stat = fs.stat;
/*
* 復(fù)制目錄中的所有文件包括子目錄
* @param{ String } 需要復(fù)制的目錄
* @param{ String } 復(fù)制到指定的目錄
*/
var copy = function( src, dst ){
// 讀取目錄中的所有文件/目錄
fs.readdir( src, function( err, paths ){
if( err ){
throw err;
}
paths.forEach(function( path ){
var _src = src + '/' + path,
_dst = dst + '/' + path,
readable, writable;
stat( _src, function( err, st ){
if( err ){
throw err;
}
// 判斷是否為文件
if( st.isFile() ){
// 創(chuàng)建讀取流
readable = fs.createReadStream( _src );
// 創(chuàng)建寫入流
writable = fs.createWriteStream( _dst );
// 通過管道來傳輸流
readable.pipe( writable );
}
// 如果是目錄則遞歸調(diào)用自身
else if( st.isDirectory() ){
exists( _src, _dst, copy );
}
});
});
});
};
// 在復(fù)制目錄前需要判斷該目錄是否存在,不存在需要先創(chuàng)建目錄
var exists = function( src, dst, callback ){
fs.exists( dst, function( exists ){
// 已存在
if( exists ){
callback( src, dst );
}
// 不存在
else{
fs.mkdir( dst, function(){
callback( src, dst );
});
}
});
};
// 復(fù)制目錄
exists( './src', './build', copy );
相關(guān)文章
淺談node使用jwt生成的token應(yīng)該存在哪里
早上逛某乎的時候,遇到一位同學(xué)在問這個問題,很好奇jwt的存儲位置。本文詳細的介紹一下,感興趣的可以了解一下2021-06-06Node 使用express-http-proxy 做api網(wǎng)關(guān)的實現(xiàn)
這篇文章主要介紹了Node 使用express-http-proxy 做api網(wǎng)關(guān)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Node.js中console.log()輸出彩色字體的方法示例
這篇文章主要給大家介紹了關(guān)于Node.js中console.log()輸出彩色字體的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12node.js平臺下利用cookie實現(xiàn)記住密碼登陸(Express+Ejs+Mysql)
這篇文章主要介紹了node.js平臺下利用cookie實現(xiàn)記住密碼登陸(Express+Ejs+Mysql),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04