Node運(yùn)行環(huán)境提供的API. 因?yàn)檫@些API都是以模塊化的方式進(jìn)行開發(fā)的, 所以我們又稱Node運(yùn)行環(huán)境提供的API為系統(tǒng)模塊
1.系統(tǒng)模塊fs 文件操作
f:file 文件 ,s:system 系統(tǒng),文件操作系統(tǒng)。
//引入文件模塊
const fs = require('fs');
1.1 讀取文件內(nèi)容
- fs.reaFile('文件路徑/文件名稱'[,'文件編碼'], callback);
代碼示例
//引入fs模塊
const fs = require('fs');
//通過模塊內(nèi)部的readFile讀取文件內(nèi)容
fs.readFile('./1.helloword.js', 'utf8', (err, doc) => {
// 如果文件讀取出錯err 是一個對象 包含錯誤信息
// 如果文件讀取正確 err是 null
// doc 是文件讀取的結(jié)果
console.log('>>>>>'+err);
console.log(doc);
});
1.2 寫入文件內(nèi)容
- fs.writeFile('文件路徑/文件名稱', '數(shù)據(jù)', callback);
代碼示例
const fs = require('fs');
fs.writeFile('./helloword.txt', '我是寫入的數(shù)據(jù)', err => {
if (err != null) {
console.log(err)
return;
}
console.log('文件寫入成功');
});
1.3 讀取文件夾
- fs.readdir('文件路徑/文件名稱', 對象, callback);
- dirent是通過fs獲取到的一個文件對象
- dirent.isDirectory() 判斷是否是一個文件夾
- dirent.isFile() 判斷是否是一個文件
- dirent.name 返回文件或者文件夾的名稱
代碼示例
//引入fs模塊
const fs = require('fs');
//讀取文件夾
fs.readdir('./gulp-demo',{withFileTypes:true}, function (err, dir) {
if (err != null) {
console.log(err);
return;
}
// fs.Dirent 類
// 1)dirent.isDirectory() 判斷是否是一個文件夾
// 2)dirent.isFile() 判斷是否是一個文件
// 3)dirent.name 返回文件或者文件夾的名稱
for (var i in dir) {
console.log(dir[i].name+'------'+dir[i].isDirectory()+'-------'+dir[i].isFile());
}
});
dist------true-------false
glup相關(guān)方法.txt------false-------true
gulpfile.js------false-------true
node_modules------true-------false
src------true-------false
1.4 文件監(jiān)聽
fs.watch(filename[, options][, listener])
- 成功調(diào)用 fs.watch 方法將返回一個新的 fs.FSWatcher 對象。所有 fs.FSWatcher 對象每當(dāng)修改指定監(jiān)視的文件,就會觸發(fā) 'change' 事件
// 引入fs模塊
const fs = require('fs');
//eventType 可以是 'rename' 或 'change'
//當(dāng)改名或出現(xiàn)或消失的時候觸發(fā)rename
//recursive:是否監(jiān)聽到內(nèi)層子目錄,默認(rèn)false;
let myWatch = fs.watch('./watch', {encoding: 'utf8', recursive: true}, (event, filename) => {
if (event == 'change') {
console.log(event + 'change事件觸發(fā)了')
}
if (event == 'rename') {
console.log(event + 'rename事件觸發(fā)了')
}
//encoding:文件名編碼格式,buffer、默認(rèn):utf8等;
//filename有可能為空
if (filename) {
console.log('filename:::', filename)
}
});
//change 事件會觸發(fā)多次 監(jiān)聽事件注冊
myWatch.on('change', function (err, filename) {
console.log(filename + '發(fā)生變化');
});
//5秒后關(guān)閉監(jiān)視
setTimeout(function () {
myWatch.close();
},5000);
fs 相關(guān)api文檔地址請點(diǎn)擊
2. 系統(tǒng)模塊path 路徑操作
2.1 路徑拼接語法
- path.join('路徑', '路徑', ...)
代碼示例
//引入path模塊
const path = require('path');
//路徑拼接
var finalPath = path.join('public', 'upload', 'avatar','a.jpg');
//輸出結(jié)果public\upload\avatar\a.jpg
console.log(finalPath);
2.2 相對路徑VS絕對路徑
- 大多數(shù)情況下使用絕對路徑,因?yàn)橄鄬β窂接袝r候相對的是命令行工具的當(dāng)前工作目錄
- 在讀取文件或者設(shè)置文件路徑時都會選擇絕對路徑
- 使用__dirname獲取當(dāng)前文件所在的絕對路徑
代碼示例
//引入fs模塊
const fs = require('fs');
//引入path模塊
const path=require('path');
console.log(__dirname);
console.log(path.join(__dirname,'1.helloword.js'));
fs.readFile(path.join(__dirname,'1.helloword.js'), 'utf8', (err, doc) => {
console.log(err);
console.log(doc)
});