一、同步與異步
文件I/O是NodeJS的核心模塊之一,主要歲文件進行讀寫操作。fs對文件的加載分爲兩種:同步和異步
- 同步方式:執行完當前操作並返回結果後,才能繼續執行後續代碼
var fs = require('fs');
fs.unlinkSync('/targetUrl');
- 異步方式:採用回調函數的方式,接收返回結果,可以立即執行後續的代碼;回調函數的第一個參數是異常參數,如果方法成功執行,那麼這個參數爲“null”局歐哲“undefined”
var fs require('fs');
fs.unlink('/targetUrl',function(err) {
if(err) {
throw err;
}
});
- 異步與同步加載的對比
var fs = require('fs');
fs.readFile('test.txt','utf-8',function(err,data) {
if(err) {
throw err;
} else {
console.log(data);
}
});
console.log('異步加載');
運行結果爲: 異步加載
data of test.txt
如果是同步執行,那麼執行結果的順序應該是相反的。
二、讀寫文件
1.eadFile讀取文件
fs.readFile(fileName[,options],callback);
fileName爲要讀取的文件名稱;
options是可選參數,是一個對象格式,用於指定文件編碼(encoding)和操作方式(flag,例如:r代表讀取文件,w代表寫入文件,a代表追加文件)
fs.readFile('/test.txt','utf-8',function(err,data) {
//或者{encoding:'utf-8'}
if(err) {
console.log(err);
}
console.log(data);
});
2.writeFile寫入文件
writeFile與readFile差不多,語法規則爲
fs.writeFile(fileName,data[,options],callback);
其中,data爲寫入文件的數據內容,callback爲寫入後的回調函數。
以追加的方式寫入文件
fs.writeFile('/rest.txt','data add to file',{'flag': 'a'},function(err) {
if(err) {
console.log(new Error('error'));
}
});
對寫入的文件進行讀取
fs.readFile('/test.txt','utf-8',function(err,data) {
if(err) {
console.log(new Error('read err'));
}
console.log(data);
});
3.read和write讀寫文件
除了使用readFile和writeFile讀寫文件之外,還可以使用read和write來對文件進行讀寫操作。
- 打開文件 fs.open()
fs.open(path,flag[,mode],callback)
path是文件路徑;
flags是打開文件的方式;可以是:
r:只讀方式打開文檔
r+:讀寫方式打開文檔
rs:同步模式下,以只讀方式打開文檔
mode:文件權限(該文件已經存在的條件下),默認值爲“0666”,即有可讀寫功能。
- 關閉文件 fs.close()
fs.close(fd[,callback])
fd爲所打開文件的描述符
- 讀取文件 fs.read()
fs.read(fd,buffer,offset,length,position,callback)
fd:文件描述符,必須接收fs.open()方法中的回調函數所返回的第二個參數;
buffer:存放讀取到的數據的Buffer對象;
offset:指定向buffer中存放數據的起始位置;
length:指定讀取文件的字節數;
position:指定在文件中讀取內容的起始位置;
callback:回調函數
fs.open('/test.txt','r'.function(err,fd) {
if(err) {
throw err;
}
var buffer = new Buffer(255);
//讀取文件
fs.read(fd,buffer,0,10,0,function(err,byteRead,buffer) {
if(err) {
throw err;
}
console.log(byteRead,buffer.slice(0,byteRead).toString());
fs.close(fd); //關閉文件
});
});
callback回調函數的參數:
err:異常
byteRead:是從文件中讀取內容的實際字節數;
buffer:被讀取的緩存區對象;
- 寫入文件 fs.write()
fs.write(fd,buffer,offset,length,position,callback);
基本參數與read()函數差不多,其中,buffer爲要寫進文件的內容
fs.open('/test.txt','r'.function(err,fd) {
if(err) {
throw err;
}
var buffer = new Buffer('the information add into file');
//讀取文件
fs.write(fd,buffer,0,10,0,function(err,byteRead,buffer) {
if(err) {
throw err;
}
console.log(byteRead,buffer.slice(0,byteRead).toString());
fs.close(fd); //關閉文件
});
});
- 追加寫入 fs.appendFile()
fs.appendFile('test.txt','data to addto file',function(err) {
if(err) {
throw err;
}
});
參考文章:匯智網-Node.js入門