国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

在Node.js中實現文件復制的方法和實例

2019-11-20 14:56:28
字體:
來源:轉載
供稿:網友

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 ){
            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() ){
                    // 創建讀取流
                    readable = fs.createReadStream( _src );
                    // 創建寫入流
                    writable = fs.createWriteStream( _dst );  
                    // 通過管道來傳輸流
                    readable.pipe( writable );
                }
                // 如果是目錄則遞歸調用自身
                else if( st.isDirectory() ){
                    exists( _src, _dst, copy );
                }
            });
        });
    });
};

// 在復制目錄前需要判斷該目錄是否存在,不存在需要先創建目錄
var exists = function( src, dst, callback ){
    fs.exists( dst, function( exists ){
        // 已存在
        if( exists ){
            callback( src, dst );
        }
        // 不存在
        else{
            fs.mkdir( dst, function(){
                callback( src, dst );
            });
        }
    });
};

// 復制目錄
exists( './src', './build', copy );

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌恰县| 贵溪市| 沽源县| 普安县| 兴文县| 礼泉县| 建始县| 大庆市| 三台县| 水富县| 彰化市| 天镇县| 获嘉县| 西丰县| 滨海县| 青冈县| 潼关县| 长垣县| 凯里市| 盘锦市| 商洛市| 汕头市| 涞源县| 广饶县| 鄯善县| 永和县| 东台市| 五华县| 宕昌县| 屯门区| 深州市| 东宁县| 海晏县| 苗栗市| 桐柏县| 铁力市| 乌拉特后旗| 辽阳市| 广宗县| 瓦房店市| 罗源县|