常用模塊
fs模塊
文件讀取
-
異步讀取文件內(nèi)容
fs.readFile("1.txt", "utf-8", function (err, data) { if (err) { console.error(err); return; } console.log(data);
});
* 同步讀取文件內(nèi)容
```
var data = fs.readFileSync("1.txt", "utf-8");
console.log("data: " + data);
```
#### 文件寫入
* 通過writeFile寫入文件
```
fs.writeFile("2.txt", "哈哈哈哈哈哈哈哈,我會進入文件中", {
flag: "a"
}, function (err) {
if (err) {
console.error(err);
return;
}
console.log("文件寫入成功");
});
```
* appendFile 寫入文件
fs.appendFile("3.txt", "家樂??ǖ脑O計費可拉伸的機發(fā)送的", function (err) {
if (err) {
console.log(err);
return;
}
console.log("文件寫入成功");
});
其中通過writeFile寫入文件中的"flag:a"是表示追加文件內(nèi)容。w是寫入會覆蓋原文件
* 文件復制
在nodojs中沒有文件復制的函數(shù)。通過文件寫入和讀取封裝,實現(xiàn)文件復制。
```
var fs = require("fs");
function copy(source,des){
fs.readFile(source, "utf-8", function (err, data) {
if (err) {
console.error(err);
return;
}
// 寫入文件
fs.writeFile(des, data, {
flag: "w",
encoding: "utf-8"
}, function (err) {
if (err) {
console.error(err);
return;
}
console.log("文件賦值成功");
});
});
}
```
#### 目錄操作
* 創(chuàng)建目錄 mkdir
```
var fs = require('fs');
fs.mkdir("dirName", 0777, function (err) {
if (err) {
console.error(err);
}
});
```
* 讀取目錄 readdir
var fs = require('fs');
fs.readdir("test", function (err, files) {
if (err) {
console.error(err);
return;
}
// files為一個數(shù)組,保存所有文件的名稱
console.log(files);
});
```
-
判斷文件是否存在 exists
fs.exists("test/test7", function (res) { console.log(res); }); -
查看目錄或者文件詳情 stat
fs.stat("test/hah.txt", function (err, stat) { if (err) { console.error(err); return; } console.log(stat); }); -
修改文件名 rename
fs.rename("test", "testttttttt", function (err) { if (err) { console.error(err); return; } console.log("名稱修改成功"); }); -
相對路徑獲取絕對路徑
fs.realpath("test", function (err, path) { if (err) { console.error(err); return; } console.log(path); });
util 模塊
-
類型驗證
console.log(util.isArray([])); // 驗證數(shù)組 console.log(util.isRegExp(/\d/)); // 驗證正則表達式 -
繼承
繼承原型的內(nèi)容,而不繼承自身的內(nèi)容// 實現(xiàn)繼承 function Person() { this.name = "哈哈"; this.age = 30; this.say = function () { console.log(this.name); }; } Person.prototype.showAge = function () { console.log(this.age); }; function Student() { Person.apply(this, arguments); this.name = "呵呵"; } // 實現(xiàn)繼承 Student.prototype = Person.prototype //uti.inherits(Student,Person) 的作用和上面的原型賦值一樣 util.inherits(Student, Person); Student.prototype.show = function() { console.log("haha"); }; var personObj = new Person(); var studentObj = new Student(); studentObj.say(); studentObj.showAge(); studentObj.show();
事件 events模塊
-
上一節(jié)對事件做過一定的闡明。下面是一些用法的補充。
- 獲取事件模塊的兩種方法
- var events = require('events').EventEmitter(); // 舊的寫法
- var events = require('events'); // 新的寫法
-
綁定事件的方法
-
obj.on('eventName',function);
girl.on("ele", function () { console.log("餓著吧"); });
* obj.addlistener('eventName",function) ``` girl.addListener("ele", function () { console.log("不吃了好么"); }); -
-
事件觸發(fā)
-
obj.emit("eventName");
girl.emit("ele");
-
-
在事件綁定中可以綁定后只觸發(fā)一個
obj.once(“eventName”, function);girl.once("die", function () { console.log("哈哈哈"); });
buffer類
緩存區(qū):暫時存放區(qū)類的一段數(shù)據(jù)
js自身只有字符串,沒有二進制類型,在處理文件是需要用二進制數(shù)據(jù),因此node中定義buffer類
是由一個八位字節(jié)四個字節(jié)元素組成的數(shù)組,單位是16進制。
-
buffer的相關方法
-
創(chuàng)建長度為12buff
// 創(chuàng)建長度為12的數(shù)組 var buff = new Buffer(12); // (填充的值,開始位置,結束位置(沒有既全部)) buff.fill(255, 0, 4); console.log(buff); -
數(shù)組創(chuàng)建
var buff = new Buffer([1, 2, 3]); console.log(buff); -
字符串創(chuàng)建
var buff = new Buffer("李大澤"); console.log(buff); -
將buffer轉(zhuǎn)為字符串
var buff = new Buffer([0xe6, 0x9d, 0x8e, 0xe5, 0xa4, 0xa7, 0xe6, 0xb3, 0xbd]); console.log(buff.toString()); buffer連接
var buff1 = new Buffer([0xe6, 0x9d, 0x8e, 0xe5]); var buff2 = new Buffer([0xa4, 0xa7, 0xe6, 0xb3, 0xbd]); var buff3 = Buffer.concat([buff1, buff2]); // 連接兩個buff,但是會占用過高內(nèi)存 console.log(buff1.toString()); console.log(buff2.toString()); console.log(buff3.toString()); // Node中推薦的方式 var StringDecoder = require('string_decoder').StringDecoder; var decoder = new StringDecoder(); console.log(decoder.write(buff1)); console.log(decoder.write(buff2)); -
stream
簡介
流的作用跟數(shù)據(jù)的處理密不可分。-
處理方法
創(chuàng)建 readStream 和 writeStream,將文件作為一小塊一小塊的數(shù)據(jù)流進行處理,而不是一整塊技術var fs = require('fs'); var rs = fs.createReadStream("data.json"); var ws = fs.createWriteStream("data2.json"); rs.on("data", function (chunk) { console.log("數(shù)據(jù)讀取中。。。。"); ws.write(chunk, function () { console.log("數(shù)據(jù)寫入成功"); }); }); rs.on("end", function () { console.log("數(shù)據(jù)讀取完畢"); });pipe 連接連個數(shù)據(jù)流,如管道一樣將數(shù)據(jù)讀入寫入
``` var fs = require('fs'); var rs = fs.createReadStream("data.json"); var ws = fs.createWriteStream("data3.json"); rs.pipe(ws); ```
path 模塊
- 獲取當前路徑 __dirname
- 規(guī)范化字符串路徑 normalize
- 拼接路徑 join
- 解析為絕對路徑 resolve
.代表當前目錄
..代表上級目錄
/代表下級分割
var fs = require('fs');
var path = require('path');
var file1 = path.normalize("./../a///b/c/../d//");
console.log(file1);
console.log(__dirname);
var file2 = path.join(__dirname, "a", "b", "..", "c");
console.log(file2);
//
// console.log(path.resolve("./test/index.html"));
// console.log(path.resolve("www", "root", "../css/common.css"));
// console.log(path.resolve("../7.fs/img.js"));