天天看點

node.js實作檔案讀取\寫入\複制内容——李帥醒部落格複制檔案:

Node.js讀取檔案内容包括同步和異步兩種方式。

執行所有檔案操作前一定要加載檔案子產品。

//加載檔案子產品
var fs=require("fs");
           

1.異步讀取檔案:

readFile(path[,encode],callback)異步讀取檔案

path:檔案路徑

encode:檔案編碼

callback:回調函數 傳回 錯誤資訊 、讀取的内容

//異步讀取檔案()
fs.readFile("./data.txt","utf-8",function(err,data){
	if(!err){
		console.log(data.toString());
	}
});
           

2.同步讀取檔案:

//同步讀取檔案
 var data=fs.readFileSync("./data.txt","utf-8")
 console.log(data);
           

3.異步寫入檔案:

異步寫檔案(path,content,callback)異步寫檔案

path 要寫入的檔案

content 要寫入的内容

/callback 回調函數

如果檔案不存在,會先建立檔案

//異步寫入檔案
	 fs.writeFile("./data.txt","每天被自己帥醒",function(err){
	 	console.log(err)
	 })
           

4.同步寫入檔案:

// fs.writeFileSync("./data.txt","每天被醜哭");
           

複制檔案:

1.首先我們需要讀取到檔案,然後才能複制檔案,切記同步異步,特别是異步,請在檔案讀取完後再執行寫入的程式

// 複制檔案
fs.readFile("./1.png",function(err,data){
	fs.writeFile("c://1.png",data,function(err){
		console.log(err);
	})
})
           

2.複制檔案:nodejs中流(stream):上面這種複制讀取小檔案沒有什麼問題,但是讀取大檔案時有可能造成記憶體爆倉(這種方式不可取),

但是對于體積較大的二進制檔案,比如音頻、視訊檔案,動辄幾個GB大小,如果使用這種方法,很容易使記憶體“爆倉”。理想的方法應該是讀一部分,寫一部分,不管檔案有多大,隻要時間允許,總會處理完成,這裡就需要用到流的概念。

var rs=fs.createReadStream("./data.txt");
var ws=fs.createWriteStream("./cope4.txt");
var chunks="";
rs.on("data",function(data){
	console.log("讀取中");
	chunks+=data.toString();
	ws.write(data.toString(),function(){
		console.log("寫入中")
	});
});
rs.on("end",function(){
	console.log("檔案讀取完成");
	console.log(chunks);
})
           

3.但上方法還不是最完善的,大家都知道讀取速度和寫入速度是比一緻的,比如固态硬碟讀取速度為502MB/s 寫入282MB/s,如果用上面的方式讀取可能導緻檔案丢失,是以應該是讀一部分,寫一部分,沒寫完就暫停讀取。由此衍生出一種叫做管道的方式:

fs.createReadStream("./data.txt").pipe(fs.createWriteStream("./copy4.txt"));
           

(我吃酸蘿蔔 新浪微網誌http://www.weibo.com/wcslb          ---李帥醒著)

node.js實作檔案讀取\寫入\複制内容——李帥醒部落格複制檔案:

繼續閱讀