常用模块
fs模块
文件读取
-
异步读取文件内容
fs.readFile("1.txt", "utf-8", function (err, data) { if (err) { console.error(err); return; } console.log(data);
});
* 同步读取文件内容
```
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", "家乐福卡的设计费可拉伸的机发送的", function (err) {
if (err) {
console.log(err);
return;
}
console.log("文件写入成功");
});
其中通过writeFile写入文件中的"flag:a"是表示追加文件内容。w是写入会覆盖原文件
* 文件复制
在nodojs中没有文件复制的函数。通过文件写入和读取封装,实现文件复制。
```
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("文件赋值成功");
});
});
}
```
#### 目录操作
* 创建目录 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为一个数组,保存所有文件的名称
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([])); // 验证数组 console.log(util.isRegExp(/\d/)); // 验证正则表达式
-
继承
继承原型的内容,而不继承自身的内容// 实现继承 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 = "呵呵"; } // 实现继承 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模块
-
上一节对事件做过一定的阐明。下面是一些用法的补充。
- 获取事件模块的两种方法
- 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("不吃了好么"); });
-
-
事件触发
-
obj.emit("eventName");
girl.emit("ele");
-
-
在事件绑定中可以绑定后只触发一个
obj.once(“eventName”, function);girl.once("die", function () { console.log("哈哈哈"); });
buffer类
缓存区:暂时存放区类的一段数据
js自身只有字符串,没有二进制类型,在处理文件是需要用二进制数据,因此node中定义buffer类
是由一个八位字节四个字节元素组成的数组,单位是16进制。
-
buffer的相关方法
-
创建长度为12buff
// 创建长度为12的数组 var buff = new Buffer(12); // (填充的值,开始位置,结束位置(没有既全部)) buff.fill(255, 0, 4); console.log(buff);
-
数组创建
var buff = new Buffer([1, 2, 3]); console.log(buff);
-
字符串创建
var buff = new Buffer("李大泽"); console.log(buff);
-
将buffer转为字符串
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,但是会占用过高内存 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
简介
流的作用跟数据的处理密不可分。-
处理方法
创建 readStream 和 writeStream,将文件作为一小块一小块的数据流进行处理,而不是一整块技术var fs = require('fs'); var rs = fs.createReadStream("data.json"); var ws = fs.createWriteStream("data2.json"); rs.on("data", function (chunk) { console.log("数据读取中。。。。"); ws.write(chunk, function () { console.log("数据写入成功"); }); }); rs.on("end", function () { console.log("数据读取完毕"); });
pipe 连接连个数据流,如管道一样将数据读入写入
``` var fs = require('fs'); var rs = fs.createReadStream("data.json"); var ws = fs.createWriteStream("data3.json"); rs.pipe(ws); ```
path 模块
- 获取当前路径 __dirname
- 规范化字符串路径 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"));