Node.js內(nèi)置基礎(chǔ)模塊fs, Node.js 提供了基礎(chǔ)的文件操作癌瘾,并同時(shí)提供文件的同步和異步操作,如:
.....................
All the methods have asynchronous and synchronous forms.
同樣觅丰,如果想使用Node.js該內(nèi)置模塊,需要在使用之前導(dǎo)入該模塊妨退,如:
To use this module do require('fs')
//這里舶胀,Node.js有規(guī)范,如果require
參數(shù)為非路徑字符碧注,則會(huì)當(dāng)做內(nèi)置模塊導(dǎo)入嚣伐。所以,使用Node內(nèi)置模塊規(guī)范語(yǔ)句為:
var modu = require('fs') ;
//非內(nèi)置模塊為:
var nModu = require('./server') ; //這里的路徑可以是相對(duì)路徑萍丐,也可以是絕對(duì)路徑
大概瞄了一眼api轩端,基本上提供的每個(gè)同步操作函數(shù)都是在異步操作函數(shù)名字之后追加Sync
,也就是說(shuō)Sync
結(jié)尾的函數(shù)基本可以認(rèn)定為同步操作,需要注意逝变。
fs模塊異步操作需要提供一個(gè)回調(diào)函數(shù)作為最后的參數(shù)傳遞基茵,該回調(diào)函數(shù)接受兩個(gè)參數(shù):
- 第一個(gè)參數(shù)為操作狀態(tài)標(biāo)示,如果操作成功返回null 或undefined ,否則壳影,該參數(shù)為一個(gè)error對(duì)象拱层。
- 第二個(gè)參數(shù)為返回的數(shù)據(jù)(data),如果失敗,則為undefined.
例如 fs.readFile:
//這是官網(wǎng)api 栗子
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err; console.log(data);
});
同步操作宴咧,不需要提供回調(diào)函數(shù)根灯,只需要使用一個(gè)變量接受結(jié)果就可以,不過(guò)如果有異常需要使用try..... catch....
, 栗子如下:
var fdata = fs.readFileSync('/etc/passwd','utf-8') ;
console.log('fdata') ;
//異常捕獲
try{
var fdata = fs.readFileSync('/etc/passwd','utf-8') ;
console.log('fdata') ;
}catch(e) {
console.log(' exception: ',e) ;
}
fs模塊提供了細(xì)致的api,包含查看文件當(dāng)前屬性信息(fs.stat(path, callback)),通過(guò)它可以看到指定文件的創(chuàng)建時(shí)間烙肺,文件大小等信息纳猪,以及轉(zhuǎn)換到操作流上更方便文件的操作fs.createReadStream(path[, options])等等,使用的時(shí)候參考api就可以很快上手,詳細(xì)的文件操作api在這里:
File System: https://nodejs.org/api/fs.html
這里有幾個(gè)大類:
內(nèi)部均提供了文件的常用操作桃笙,需要注意的是氏堤,它們內(nèi)部提供函數(shù)和事件的版本。
var fs = require('fs') ;
// fs.access('./ht.html', fs.constants.R_OK | fs.constants.W_OK, (err) => {
// console.log(err ? 'no access!' : 'can read/write');
// });
//
var rs = fs.createReadStream('./ht.html', 'utf-8');
//這里使用了`data` 事件搏明,用來(lái)監(jiān)聽(tīng)數(shù)據(jù)讀取事件鼠锈,如果數(shù)據(jù)量大,這個(gè)回調(diào)函數(shù)會(huì)被調(diào)用多次星著,具體上限是多少购笆,我沒(méi)有測(cè)試過(guò)。
rs.on('data', function (data) {
console.log('data:', data) ;
});
rs.on('end', function () {
console.log('end');
});
rs.on('error', function (err) {
console.log('error: ' , err);
});
保存上面代碼到一個(gè)js文件强饮,運(yùn)行 node node.js
該文件內(nèi)容就輸出到命令行窗口上了由桌。
[palm@arch]: ~/Desktop/js>$ node node.js
data: <html>
<head>js test page</head>
js test page!
<body>
</body>
<script type="text/javascript" src= 'jquery-1.11.1.js'></script>
<script type="text/javascript" src='extend.js'></script>
</html>
end
fs模塊就學(xué)到這里,后面如果用到了邮丰,再來(lái)查詢文檔行您,如果上面有錯(cuò)誤,請(qǐng)路過(guò)的朋友指出剪廉,謝謝了~