node.js 拷貝文件
阿新 • • 發佈:2017-07-27
路徑 文件信息 dstream 讀取文件 pipe() spa 簡單的 命令 proc
Node.js提供了文件操作的api,但沒有直接拷貝文件的相關操作。不過可以利用fs模塊寫個簡單的拷貝文件程序。
var fs = require(‘fs‘); function copy(filename,src) { fs.writeFileSync(filename, fs.readFileSync(src)); //filename如果不存在,則會在路徑上新建文件 } function main(argv) { copy(argv[0], argv[1]); //argv[0]為要拷貝的文件名,argv[1]為拷貝數據的來源 } fs.stat(process.argv.slice(2)[1], function (err, stats) { //檢驗是否為文件 if(stats.isFile()){ main(process.argv.slice(2)); }else{ console.log(‘invalid file‘); } });
以上程序通過stats類獲取文件信息,isFile判斷是否為文件,再通過fs.writeFileSync,fs.readFileSync同步寫入或讀取文件。
process.argv獲得命令行參數。然而argv[0],argv[1]為NodeJS執行程序的絕對路徑和運行模塊的絕對路徑,所以argv[2]開始才是輸入的參數,可以通過slice()截取參數。
然而這樣的方式是將文件內容全部先讀取至內存再全部一次性寫入至指定路徑,如果文件很大,內存則承受不了,所以對於超大文件的拷貝可以用數據流的方式實現,將原程序的copy函數修改一下
function copy(filename,src) { fs.createReadStream(src).pipe(fs.createWriteStream(filename)); }
fs.createReadStream創建了一個只讀數據流,fs.createWriteStream創建了一個只寫數據流,pipe()將兩個數據流連接在一起進行傳輸。
通過數據流讀取文件時,會將大文件分多次進行讀取,即使文件沒讀取完也可以對讀取的數據進行操作,寫入文件也是如此,用這種方式來拷貝數據是十分高效的。
文件操作相關API:http://nodejs.cn/api/fs.html
node.js 拷貝文件