Node的文件系统及Buffer概述

7 篇文章 0 订阅

node.js开发网站

node.js本身就是一个http服务器,不需要web容器。
node.js需要我们自己写代码处理请求。
在这里插入图片描述

Node的文件系统

fs模块:提供了文件操作的API。
fs模块共有5个类:

  • fs.Dirent类:指示文件的类型
  • fs.FSWatcher类:监视文件的状态
  • fs.ReadStream类:读取流(文件输入流)
  • fs.WriteStream类:写入流(文件输出流)
  • fs.Stats类:文件的信息(文件的状态)

fs模块中方法的分类:

  • 同步方法:方法名带有Sync后缀
  • 异步方法:方法名不带Sync后缀,最后一个参数都是回调函数

Node中文件路径的表示方式:

字符串方式:

  • windows系统下路径分割符为:\
  • 在linux系统下路径分割符为:/

Buffer:Buffer.from(字符串) – 主要用于linux系统

URL方式:在Node7.6.0以上的版本使用,支持file协议。
在不同的操作系统下解析出来的路径会有区别。

const fileurl = new URL('file:///temp/hello.txt')

文件模式(文件的访问权限):

  • a:以追加的方式打开文件,若文件不存在则创建
  • a+:以读取追加的方式打开文件,若文件不存在则创建
  • r:以只读的方式打开文件,若文件不存在则抛出异常
  • r+:以读写的方式打开文件,若文件不存在则抛出异常
  • w:以写入的方式打开文件,若文件不存在则创建
  • w+:以读写的方式打开文件,若文件不存在则创建

文件与目录的基本操作

文件的打开

  • 同步打开
fs.openSync('文件名',文件标记符)
  • 异步打开
fs.open('文件名','打开方式',callback);

获取文件信息:fs.Stats

stats.isDirectory([path]):判断参数path是否是目录,若是返回true,若不是返回false
			
stats.isFile([path]):判断参数path是否是文件,若是返回true,若不是返回false
const fs = require('fs');

fs.stat('E:\\德云社\\代码\\7.30\\02.txt',(err, stats) => {
    if(err) {
        throw err;
    }
    console.log(stats);
    console.log('是否是文件:',stats.isFile());
    console.log('是否是目录:',stats.isDirectory());
})

异步读取文件:

fs.readFile('E:\\代码\\7.30\\02.txt',(err,data) => {
    if(err) {
        console.log(err);
    }
    console.log(`文件内容是:` + data.toString());
})
console.log('主程序结束');

同步读取文件:

var data = fs.readFileSync('E:\\代码\\7.30\\02.txt');
console.log(data.toString());
console.log('主程序结束');

创建目录:fs.mkdir(path,callback)

删除目录:fs.rmdir(path,callback)

删除文件:fs.unlink(path,callback)

写入文件操作

fs模块:在使用的时候,必须通过require( )函数来加载该模块才能使用。

//fs模块不是全局模块 全局模块可以直接使用 非全局模块需要先进行加载
var fs = require('fs')

调用fs.writeFile(file, data[, options], callback)实现文件写入。

// 加载文件操作模块
var fs = require('fs');

//实现文件写入操作
var msg = 'Hello';

// 调用writeFile()实现文件写入
// fs.writeFile(file, data[, options], callback)
fs.writeFile('./hello.txt',msg,'utf8',function (err) {
    // 如果err === null 表示文件写入成功
    if(err) {
        console.log(err);
    }else {
        console.log('ok');
    }
})

读文件操作

调用fs.readFile(path[, options], callback)实现文件读取。

var fs = require('fs');

// 调用readFile()方法来读取文件
// 在读取文件的时候,如果传递了编码,那么回调函数中会自动转化
// callback两个参数 err data
fs.readFile('./hello.txt',function (err,data) {
    if(err) {
        throw err;
    }
    // data参数的数据类型是Buffer对象 里面保存的是一个个的字节
    // 转化为字符串
    console.log(data.toString('utf8'));
})

path模块拼接路径

var fs = require('fs');
var path = require('path')

var filename = path.join(__dirname,'hello.txt')
console.log(__dirname)
console.log(__filename)

// 调用readFile()方法来读取文件
// 在读取文件的时候,如果传递了编码,那么回调函数中会自动转化
fs.readFile(filename,function (err,data) {
    if(err) {
        throw err;
    }
    // data参数的数据类型是Buffer对象 里面保存的是一个个的字节
    // 转化为字符串
    console.log(data.toString('utf8'));
})

Node事件处理机制

事件队列:将事件放入事件队列。
事件循环机制:对事件队列中的事件进行轮询、检查,依次处理每个事件。
事件监听:

  • 引入事件模块:events
  • 创建事件监听对象:EventEmitter
  • 注册监听:监听不同类型的事件(使用on函数)

触发事件:使用emit函数

//引入事件处理模块
const EventEmitter = require('events');

//创建事件监听对象:对事件进行监听
const myEimtter = new EventEmitter.EventEmitter();

//注册监听:使用on函数 seen表示事件类型 若该事件被触发则执行后面的处理程序
myEimtter.on('see',(who) => {
    console.log(`${who},你回来了`);
})
myEimtter.on('seen',function () {
    console.log('欢迎回家');
})
//触发事件
myEimtter.emit('see','邓瑛');
myEimtter.emit('seen');

Node的全局对象

全局属性:
__filename:指的是当前正在执行的脚本文件的完善路径
__dirname:指的是当前正在执行的脚本文件的目录(路径)

全局对象:

  • console实例对象
console.log("字符串"):输出到标准终端
	
console.error():输出错误信息
  • process:进程对象
process.stdout:输出对象,该对象下的write方法的作用与console.log()相同
		  
proce.stdin:输入对象,利用该对象可以从标准输入终端向node程序输入数据

全局函数:

setTimeout(cb,ms):cb表示一个回调函数,ms表示时间(单位是毫秒);表示至少多少毫秒以后调用函数返回一个可以清除的计时器对象。
							 
clearTimeout(计时器对象):清除由setTimeout创建的计时器
	   
setInterval(cb, ms):至少多少毫秒以后重复运行回调函数cb
	   
clearInterval(计时器对象):清除由setInterval创建的计时器
	   
setImmediate(cb):即时计时器,该计时器的运行没有时间间隔,创建即运行;返回计时器对象
	   
clearImmediate(计时器对象):清除由setImmediate创建的计时器

Buffer

JavaScript语言没有读取或操作二进制数据流的机制。
Node.js中引入了Buffer类型使我们可以操作TCP流或文件流。
专门用于处理二进制数据的对象(接口),Node原生创建,可以直接使用不需要导入
Buffer对象又称为缓冲区对象,它有一个构造函数,由构造函数创建的对象,v8引擎会为其分配一块内存。
Buffer中存放的数据是0~255之间的整数值(即一个字节的数据)。
Buffer类型的对象类似于整数数组,但Buffer的大小是固定的,它的大小在创建时确定,且无法调整。
Buffer用来临时存储一些二进制数据,可以传输数据,每次传输小部分数据,直到所有数据都传输完毕。

创建Buffer实例:

  • 使用new运算符(过时)
var  变量 = new Buffer([参数])
  • 使用from函数
 var 变量 = Buffer.from([参数])
  • 使用alloc函数
var 变量 = Buffer.alloc(size,fill)

将Buffer中的数据转换为字符串:

使用toString函数,需要指定字符集(编码格式),默认utf8。

  console.log(buf6.toString('utf8',0,4));

拼接多个Buffer:

var buf = [buf1,buf2,buf3];
var buffer = Buffer.concat(buf)

获取字符串对应的字节个数:

var len = Buffer.byteLength('你好世界hello','utf8')
console.log(len)
//17 汉字一个占三个字节 英文字母一个占一个字节

将Buffer转换为JSON对象:

JSON(JavaScript Object Notation)对象:是前后端数据交换的常用格式,是以key-value的方式保存数据,由于体积小、创建方便、解析简单,所以被广泛使用。
只要应用程序需要将结构化信息作为文本进行交换或存储,即可使用它。

使用Node的JSON对象进行转换:

 var json = JSON.stringify(buf);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值