node学习---基础模块

node模块

fs文件系统模块----负责读写文件

ps:和其他js模块不同的是,fs文件系统模块同时提供了同步异步的方法

读取文件
  • readFile(file, ‘utf-8’, callback) : 异步读取文件 — 回调函数中捕获错误和获取读取的值,回调函数参数(err, data)
  • readFileSync(file, ‘utf-8’) :同步读取文件 — 利用try{...} catch(e) {...}捕获错误,函数直接返回读取的值
var fs = require('fs');
// 异步读取
fs.readFile('simple.txt', 'utf-8', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

// 读取二进制文件 --- eg: 图片
fs.readFile('1.jpg', function (err, data) {    // 不传编码规则 则返回Buffer对象
    if (err) {
        console.log(err);
    } else {
        console.log(data);
        console.log(data.length + 'bytes');
        let test = data.toString('utf-8');   // Buffer对象转string
        console.log(test);
        let buf = Buffer.from(test, 'utf-8');   // string转Buffer对象
        console.log(buf);
    }
})

// 同步读取文件 ----- 用try...catch()捕获错误
try {
    var data = fs.readFileSync('simple.txt', 'utf-8');
    console.log(data);
} catch (err) {
    console.log(err)
}
写入文件
  • writeFile(file, data, callback) : 异步写入文件 — 回调函数中捕获错误,回调函数只有一个err参数
  • writeFileSync('file, data) :同步写入文件 — 利用try{...} catch(e) {...}捕获错误

ps:若data为字符串,则按utf-8编码规则写入,若为Buffer对象,则以二进制文件写入

获文件大小、创建时间等信息
  • fs.stat() : 异步查询,返回一个Stat对象,告诉我们文件或目录的详细信息 — 回调函数中获取该对象
  • fs.statSync() :同步查询,直接返回一个Stat对象
fs.stat('input.txt', function (err, stat) {
    if (err) {
        console.log(err);
    } else {
        console.log(stat.isFile());
        console.log(stat);
    }
})
let stat = fs.statSync('input.txt')
console.log(stat);

stream — 仅在服务器端可用的模块,目的:支持流数据结构

stdin 标准输入流 — 键盘输入到应用程序
stdout 标准输出流 — 应用程序输出到显示器

PS:流的特点是数据是有序的,而且必须依次读取,或者依次写入不能像Array那样随机定位

createReadStream ---- 文件读取流

流的事件

  • data 事件 — 表示流的数据已经可以读取了
  • end 事件 — 表示流已经到末尾了,没有数据可以读取
  • err事件 — 表示出错了
createWriteStream ---- 文件写入流
  • write() ---- 不断写入
  • end() — end函数结束
'use strict';
var fs = require('fs')

var ws1 = fs.createWriteStream('output1.txt', 'utf-8');
ws1.write('使用Stream写入文本数据...\n');
ws1.write('END.');
ws1.end();
pipe() ----- 一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流
'use strict';

var fs = require('fs');

var rs = fs.createReadStream('sample.txt');
var ws = fs.createWriteStream('copied.txt');

rs.pipe(ws);

ps:实际上就是复制文件
默认情况下,当Readable流的数据读取完毕,end事件触发后,将自动关闭Writable流。如果我们不希望自动关闭Writable流,需要传入参数readable.pipe(writable, { end: false });

你可能感兴趣的:(node)