Node.js学习阶段(3)

36 篇文章 0 订阅
25 篇文章 0 订阅

1.Buffer(缓冲区)

Buffer的结构和数组很像,操作的方法也和数组类似
数组中不能存储二进制的文件,而buffer就是专门用来存储二进制数据
使用buffer不需要引入模块,直接使用即可
在buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示
在这里插入图片描述

//1.将一个字符串保存到buffer中
var buf = Buffer.from(str);

//2.创建一个10个字节的buffer
var buf2 = Buffer.alloc(10);
//通过索引,来操作buf中的元素
buf2[0] = 88;
buf2[1] = 255;
buf2[2] = 0xaa;//可以添加16进制
buf2[3] = 255;

buf.toString() //3.将缓冲区中的数据转换为字符串

2.文件系统(File System)

文件系统简单来说就是通过Node来操作系统中的文件
使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载

同步文件的写入

1.打开文件
fs.openSync(path, flags[, mode])
- path 要打开文件的路径
- flags 打开文件要做的操作的类型
r 只读的
w 可写的
- mode 设置文件的操作权限,一般不传
返回值:
- 该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作

2.向文件中写入内容
fs.writeSync(fd, string[, position[, encoding]])
- fd 文件的描述符,需要传递要写入的文件的描述符
- string 要写入的内容
- position 写入的起始位置
- encoding 写入的编码,默认utf-8

3.保存并关闭文件
fs.closeSync(fd)
- fd 要关闭的文件的描述符

var fs = require('fs')
//打开文件
var fd = fs.openSync('hello.txt','w')
//向文件中写入内容
fs.writeSync(fd , 'node练习' , 2)//这个2表示从索引2开始写
//关闭文件
fs.closeSync(fd)

3.异步文件写入

fs.open(path, flags[, mode], callback)
- 用来打开一个文件
- 异步调用的方法,结果都是通过回调函数的参数返回的
- 回调函数两个参数:
err 错误对象,如果没有错误则为null
fd 文件的描述符

fs.write(fd, string[, position[, encoding]], callback)
- 用来异步写入一个文件

fs.close(fd, callback)
- 用来关闭文件

4.简单文件写入

fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])
- file 要操作的文件的路径
- data 要写入的数据
- options 选项,可以对写入进行一些设置
- callback 当写入完成以后执行的函数

flag
r 只读
w 可写
a 追加

fs.writeFile("C:/Users/lilichao/Desktop/hello.txt",
"这是通过writeFile写入的内容",{flag:"w"} , //这里的一定是{}里面有三个参数,一般不写,然后里面的flag属性如下图所示
function (err) {
	if(!err){
		console.log("写入成功~~~");
	}else{
		console.log(err);
	}
});

在这里插入图片描述

5.流式文件写入

同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出
//创建一个可写流
fs.createWriteStream(path[, options])
- 可以用来创建一个可写流
- path,文件路径
- options 配置的参数

var fs = require("fs");
var ws = fs.createWriteStream("hello3.txt");
/可以通过监听流的open和close事件来监听流的打开和关闭
/*
	on(事件字符串,回调函数)
		- 可以为对象绑定一个事件,长期有效

	once(事件字符串,回调函数)
		- 可以为对象绑定一个一次性的事件,该事件将会在触发一次以后自动失效
		- 这里面 流开一次就行了,开完这个函数没必要存在了,所以用了once

* */
ws.once("open",function () {
	console.log("流打开了~~~");
});

ws.once("close",function () {
	console.log("流关闭了~~~");
});

//通过ws向文件中输出内容
ws.write("通过可写流写入文件的内容");
ws.write("今天天气真不错");
ws.write("锄禾日当午");
ws.write("红掌拨清清");
ws.write("清清真漂亮");

//关闭流 这里不能用close()会出错,没写完就给关了,用end()写完了再关
ws.end();

6.简单文件的读取

fs.readFile(path[, options], callback)
fs.readFileSync(path[, options])
- path 要读取的文件的路径
- options 读取的选项
- callback回调函数,通过回调函数将读取到内容返回(err , data)
err 错误对象
data 读取到的数据,会返回一个Buffer,因为可能返回的是一个图片,不一定就是字符串

var fs = require("fs");

//var path = "C:/Users/Desktop/笔记.mp3";

fs.readFile("an.jpg" , function (err , data) {
	if(!err){
		//console.log(data);
		//将data写入到文件中 data就是你读的那个东西
		fs.writeFile("C:/Users/Desktop/hello.jpg",data,function(err){
			if(!err){
				console.log("文件写入成功");
			}
		} );
	}
});

7.流式文件的读取

//如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据

rs.on("data", function (data) {
	//console.log(data);
	//将读取到的数据写入到可写流中
	ws.write(data);
});

不过上面这么写很麻烦,所以综合来说还是这么写
var fs = require(“fs”);

//创建一个可读流
var rs = fs.createReadStream("C:/Users/lilichao/Desktop/笔记.mp3");
//创建一个可写流
var ws = fs.createWriteStream("b.mp3");

//pipe()可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws);

8.fs中其他方法

了解就好,到时候现找,这谁记得住啊,顶不住顶不住。。

// fs.existsSync(path)检查一个文件是否存在
var fs = require('fs')
var isExists =  fs.existsSync('02.文件系统/hello.txt')
console.log(isExists)

//fs.stat(path, callback)
//fs.statSync(path)
//获取文件的状态
//它会给我们返回一个对象,这个对象中保存了当前对象状态的信息
// fs.stat('02.文件系统/hello.txt',function (err , stat) {
//   // size表示文档大小
//   //isFile()是否是一个文件
//   //isDirectory()是否是一个文件夹
//   console.log(stat.isDirectory())
// })

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

//fs.readdir(path[, options], callback)
//fs.readdirSync(path[, options])
//读取一个目录的目录结构
//files是一个字符串数组,
// 每一个元素就是一个文件夹或文件的名字,就是把里面有什么给出来
fs.readdir('.',function (err , files) {
  if (!err){
    console.log(files)
  }
})

// fs.truncate(path[, len], callback)
// fs.truncateSync(path[, len])
//截断文件 将文件修改为指定的大小,把文件设置成几个字节,截中文有点隐患
fs.truncateSync('02.文件系统/hello2.txt',3)

//fs.mkdir(path[, options], callback)
//fs.mkdirSync(path[, options])
//创建一个目录(文件夹)
// fs.mkdirSync('hello6')

//fs.rmdir(path, callback)
//fs.rmdirSync(path)
//删除文件夹
//  fs.rmdirSync('hello6')

//fs.rename(oldPath, newPath, callback)
//fs.renameSync(oldPath, newPath)
//对文件进行重命名
//参数: oldPath 旧路径
//       newPath  新路径
//       callback
fs.rename('02.文件系统/a.mp3','02.文件系统/h.mp3',function(err) {
    if (!err){
      console.log('修改成功')
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值