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 ---李帥醒著)
