在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 文件拷貝
文本編碼
小結(jié)
API 走馬觀花
API 走馬觀花
迭代
小結(jié)
運(yùn)行
回調(diào)
需求
代碼設(shè)計(jì)模式
進(jìn)程介紹
模塊
工程目錄
小結(jié)
小結(jié)
遍歷目錄
小結(jié)
小結(jié)
API 走馬觀花
用途
NPM
小結(jié)
安裝
網(wǎng)絡(luò)操作介紹
二進(jìn)制模塊
什么是 NodeJS
命令行程序
靈機(jī)一點(diǎn)
域(Domain)
應(yīng)用場(chǎng)景
模塊路徑解析規(guī)則
文件拷貝

文件拷貝

NodeJS 提供了基本的文件操作 API,但是像文件拷貝這種高級(jí)功能就沒(méi)有提供,因此我們先拿文件拷貝程序練手。與 copy 命令類(lèi)似,我們的程序需要能接受源文件路徑與目標(biāo)文件路徑兩個(gè)參數(shù)。

小文件拷貝

我們使用 NodeJS 內(nèi)置的 fs 模塊簡(jiǎn)單實(shí)現(xiàn)這個(gè)程序如下。

var fs = require('fs');

function copy(src, dst) {
    fs.writeFileSync(dst, fs.readFileSync(src));
}

function main(argv) {
    copy(argv[0], argv[1]);
}

main(process.argv.slice(2));

以上程序使用 fs.readFileSync 從源路徑讀取文件內(nèi)容,并使用 fs.writeFileSync 將文件內(nèi)容寫(xiě)入目標(biāo)路徑。

豆知識(shí): process 是一個(gè)全局變量,可通過(guò) process.argv 獲得命令行參數(shù)。由于 argv[0] 固定等于 NodeJS 執(zhí)行程序的絕對(duì)路徑,argv[1] 固定等于主模塊的絕對(duì)路徑,因此第一個(gè)命令行參數(shù)從 argv[2] 這個(gè)位置開(kāi)始。

大文件拷貝

上邊的程序拷貝一些小文件沒(méi)啥問(wèn)題,但這種一次性把所有文件內(nèi)容都讀取到內(nèi)存中后再一次性寫(xiě)入磁盤(pán)的方式不適合拷貝大文件,內(nèi)存會(huì)爆倉(cāng)。對(duì)于大文件,我們只能讀一點(diǎn)寫(xiě)一點(diǎn),直到完成拷貝。因此上邊的程序需要改造如下。

var fs = require('fs');

function copy(src, dst) {
    fs.createReadStream(src).pipe(fs.createWriteStream(dst));
}

function main(argv) {
    copy(argv[0], argv[1]);
}

main(process.argv.slice(2));

以上程序使用 fs.createReadStream 創(chuàng)建了一個(gè)源文件的只讀數(shù)據(jù)流,并使用 fs.createWriteStream 創(chuàng)建了一個(gè)目標(biāo)文件的只寫(xiě)數(shù)據(jù)流,并且用 pipe 方法把兩個(gè)數(shù)據(jù)流連接了起來(lái)。連接起來(lái)后發(fā)生的事情,說(shuō)得抽象點(diǎn)的話(huà),水順著水管從一個(gè)桶流到了另一個(gè)桶。

上一篇:迭代下一篇:什么是 NodeJS