当前位置:网站首页>Node的文件系统及Buffer概述
Node的文件系统及Buffer概述
2022-04-23 05:53:00 【遥岑.】
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);
版权声明
本文为[遥岑.]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_52942098/article/details/120685810
边栏推荐
- Generate random number
- [UDS unified diagnostic service] III. application layer protocol (1)
- 2022ldu winter vacation training - program patch
- copy constructor
- Understanding of SSH public key and private key
- undefined reference to `Nabo::NearestNeighbourSearch
- Error in created hook: “ReferenceError: “Promise”未定义“
- Palindromic Primes
- 提交本地仓库并同步码云仓库
- JS中 t, _ => 的解析
猜你喜欢

FOC SVPWM函数PWMC_SetPhaseVoltage解析

记第一次使用阿里字体图标库
![[UDS unified diagnostic service] II. Network layer protocol (1) - overview and functions of network layer](/img/39/30bb897ff4467105de08c8c1c737ab.png)
[UDS unified diagnostic service] II. Network layer protocol (1) - overview and functions of network layer
![[UDS unified diagnostic service] IV. typical diagnostic service (5) - function / component test function unit (routine function unit 0x31)](/img/98/becd691d3d46f74f7666f5cb323eaf.png)
[UDS unified diagnostic service] IV. typical diagnostic service (5) - function / component test function unit (routine function unit 0x31)
![[UDS unified diagnostic service] IV. typical diagnostic service (2) - data transmission function unit](/img/22/c501c79176a93345dc72ff150c53c3.png)
[UDS unified diagnostic service] IV. typical diagnostic service (2) - data transmission function unit
![[UDS unified diagnostic service] i. overview of diagnosis (4) - basic concepts and terms](/img/fb/3d3cf54dc5b67ce42d60e0fe63baa6.png)
[UDS unified diagnostic service] i. overview of diagnosis (4) - basic concepts and terms

2020 Jiangsu Collegiate Programming Contest-A.Array
![[UDS unified diagnosis service] IV. typical diagnosis service (1) - diagnosis and communication management function unit](/img/4f/7ca6505b545fb825b0dba36f474da7.png)
[UDS unified diagnosis service] IV. typical diagnosis service (1) - diagnosis and communication management function unit

查漏补缺(六)

2020 Jiangsu Collegiate Programming Contest-A.Array
随机推荐
VHDL finite state machine (FSM) code example
Qt 添加QSerialPort类 实现串口操作
undefined reference to `Nabo::NearestNeighbourSearch
FOC SVPWM函数PWMC_SetPhaseVoltage解析
Eigen 学习总结
Interprocess communication - mutex
Matlab calibration board corner detection principle
Krypton zeal
js根据名字将数组对象中名字相同的项组成一个相同的数组
2022ldu winter vacation training - program patch
HDU-Memory Control
CUDA环境安装
C语言 #和##的使用
友元函数,友元类,类模板
汇编 32位无符号加法计算器
C语言进阶要点笔记3
The difference between single quotation mark, double quotation mark and back quotation mark in shell script
FOC single resistance sampling position loop control servo motor
Notes on advanced points of C language 2
SQLite3 encrypted version