首頁 > web前端 > js教程 > 在Node.js中實作檔案複製的方法和實例_node.js

在Node.js中實作檔案複製的方法和實例_node.js

WBOY
發布: 2016-05-16 16:46:15
原創
1316 人瀏覽過

Node.js 本身並沒有提供直接複製檔案的 API,如果想用 Node.js 複製檔案或目錄,需要藉助其他的 API 來實作。複製單一的檔案可以直接用 readFile、writeFile,這樣比較簡單。如果是複製一個目錄下的所有文件,目錄下可能還包含了子目錄,那麼此時就需要用到更高階點的 API 了。

流是 Node.js 移動資料的方式,Node.js 中的流是可讀/可寫的,HTTP 和檔案系統模組都有用到流。在檔案系統中,使用流來讀取檔案的時候,對於一個大檔案可能不會一次讀取完,而是會分好幾次讀取完,讀取的時候會回應資料事件,在檔案沒讀取完的時候就可以對讀取的資料進行操作。同理,在寫入流的時候也和讀取時一樣,大檔案並不會一次寫入。這種移動資料的方式是非常有效率的,尤其是對於大檔案而言,使用流比等待將大檔案全部讀取完再來操作檔案要快得多。

如果想在讀取流和寫入流的時候做完全的控制,可以使用資料事件。但對於單純的檔案複製來說讀取流和寫入流可以透過管道來傳輸資料。

實際應用:

複製程式碼 程式碼如下:

var fs = require( 'fs' ),
    stat = fs.stat;

/*
 * 複製目錄中的所有檔案包含子目錄
/*
 * 複製目錄中的所有檔案包含子目錄
 * @param{ String } 需要複製的目錄
 * @param{ String } 複製到指定的目錄
 */
var copy = function( src, dst ){
    // 讀取目錄中所有的檔案/目錄
    fs.readdir( src, function( err, paths ){
        if( err   }

        paths.forEach(function( path ){
            var _src st '/' path,
                readable, writable;       

            stat( _src, function( err, st ){

                  throw err;
                }

                // 判斷是否為文件

                if( st.isFile() ){

                    // 創建讀取流
                    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 ) {
        // 存在

        if( exists ){

               // 不存在
        else{
            fs.mk , function(){
                callback( src, dst );
      ;
};

// 複製目錄
exists( './src', './build', copy );



相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板