Node.js 本身並沒有提供直接複製檔案的 API,如果想用 Node.js 複製檔案或目錄,需要藉助其他的 API 來實作。複製單一的檔案可以直接用 readFile、writeFile,這樣比較簡單。如果是複製一個目錄下的所有文件,目錄下可能還包含了子目錄,那麼此時就需要用到更高階點的 API 了。
流
流是 Node.js 移動資料的方式,Node.js 中的流是可讀/可寫的,HTTP 和檔案系統模組都有用到流。在檔案系統中,使用流來讀取檔案的時候,對於一個大檔案可能不會一次讀取完,而是會分好幾次讀取完,讀取的時候會回應資料事件,在檔案沒讀取完的時候就可以對讀取的資料進行操作。同理,在寫入流的時候也和讀取時一樣,大檔案並不會一次寫入。這種移動資料的方式是非常有效率的,尤其是對於大檔案而言,使用流比等待將大檔案全部讀取完再來操作檔案要快得多。
管
如果想在讀取流和寫入流的時候做完全的控制,可以使用資料事件。但對於單純的檔案複製來說讀取流和寫入流可以透過管道來傳輸資料。
實際應用:
paths.forEach(function( path ){
var _src st '/' path,
readable, writable;
throw err;
}
// 判斷是否為文件
// 創建讀取流
readable = fs.createReadStream( _src );
// 創建寫入流
writable = fs.createWriteStream( _dst );
// 通過管道來傳輸流
readable.pipe( writable );
}
// 如果是目錄則遞歸調用自身
else if( st.isDirectory() ){
> }
});
;
// 在複製目錄前需要判斷目錄是否存在,不存在需要先建立目錄
var exists = function( src, dst, callback ){
fs.exists( dst, function( exists ) {
// 存在
// 不存在
else{
fs.mk , function(){
callback( src, dst );
;
};
// 複製目錄
exists( './src', './build', copy );