Nodejs-文件流


1.什么是流?

流是程序輸入輸出的一個連續的字節序列。

有文件流,網絡流,設備(例如鼠標,鍵盤,磁盤,調制解調器和打印機)的輸入輸出都是用流來處理的。

任何數據的最根本表現形式都是二進制

讀取文件

用異步方式讀取

fs.readFile(filename,callback);

異步的方法函數最后一個參數為回調函數,回調函數的第一個參數包含了錯誤信息(error)。

寫入文件

語法

以下為異步模式下寫入文件的語法格式:

fs.writeFile(filename, data[, options], callback)

如果文件存在,該方法寫入的內容會覆蓋舊的文件內容。

參數

參數使用說明如下:

  • path - 文件路徑。

  • data - 要寫入文件的數據,可以是 String(字符串) 或 Buffer(流) 對象。

  • options - 該參數是一個對象,包含 {encoding, mode, flag}。默認編碼為 utf8, 模式為 0666 , flag 為 'w'

  • callback - 回調函數,回調函數只包含錯誤信息參數(err),在寫入失敗時返回。

//文件復制
const fs=require('fs');
const path=require('path');

console.time('read');
fs.readFile('D:\\nodejs\\01.txt',(error,data)=>{
	if(error){
		throw error
	}
	console.timeEnd('read');
	console.time('write');
	//讀取文件拿到
	fs.writeFile('D:\\nodejs\\02.txt',data,error=>{
		if(error){
			throw error
		}
		console.timeEnd('write');
		console.log('拷貝完成');
	});

});

  

  

但是如果大文件的拷貝的話,內存就受不了

而且沒有進度的概念,比如說,你拷貝一個很大的文件,一直在拷貝,你不知道已經拷貝到哪了,已經等不及了,就把它給停掉了,這樣就造成之前的拷貝白白浪費了。

因此采取文件流的方式復制,就是針對大文件操作的

2.文件流操作方式

獲取文件信息

通過異步模式獲取文件信息的語法格式:

fs.stat(path, callback)

參數

參數使用說明如下:

  • path - 文件路徑。

  • callback - 回調函數,帶有兩個參數如:(err, stats), stats 是 fs.Stats 對象。

fs.stat(path)執行后,會將stats類的實例返回給其回調函數。可以通過stats類中的提供方法判斷文件的相關屬性。

 

//文件流的方式復制
const fs=require('fs');
const path=require('path');

//創建文件的讀取流,並沒有讀出正式的數據,開始了讀取文件的任務
var reader=fs.createReadStream('D:\\nodejs\\03.txt');
//創建一個寫入流
var writer=fs.createWriteStream('D:\\nodejs\\04.txt');
fs.stat('D:\\nodejs\\01.txt',(err,stats)=>{
	if(stats){//如果有stats,就說明文件存在
		var readTotal=0;
		reader.on('data',(chunk)=>{
			//chunk是一個buffer(字節數組),每次讀取的只是一小部分數據
			writer.write(chunk,(err)=>{
				console.log('寫的進度:'+((readTotal+=chunk.length)/stats.size*100)+'%');//可以查看進度
			});
		});
	}
});

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM