md 创建文件夹
rd 删除文件夹
E: 想进入哪个盘就哪个盘冒号
\
进程
-进程负责为程序的运行提供必备的环境
-进程就相当于工厂的车间 电脑程序(进程)很多会被挂起
线程
-线程计算机中最小的计算单位,线程负责执行进程中的程序
-线程就相当于工厂的工人 电脑程序(进程)等待线程处理
package.json 类似于简介有依赖等....
npm 命令
npm version 查看所有版本
npm init -y
npm install/i 包名
npm remove/r 包名
npm install --save 安装包并且添加到依赖中
npm install 包名 -g 全局安装 /(全局安装的包一般都是一些工具)
Buffer
- 数组中不能存储二进制文件,而Buffer就是专门存储二进制文件数据的 数据进入进出缓存区
- 在Buffer中存储的是二进制数据,但是在显示时都是以16进制显示
- Buffer的length是字节长度
- Buffer一旦创建大小无法修改 ,因为Buffer.alloc分配连续的内存空间
- 只要数字在控制台或页面中打印一定是都是以10进制显示 //buf2[0].toString(2)可以指定显示的进制
1.Buffer.from(str) 将一个字符串转化为Buffer
2.Buffer.alloc(size) 创建一个指定大小的Buffer
3.Buffer.allocUnsafe(size) 创建一个指定大小的Buffer 可能包含敏感信息
4.buf.tostring()将缓冲区的数据转化为字符串
const str = '梁晓凤';
const buf = Buffer.from(str);
console.log(buf.length,'buf===>'); //9字节
console.log(str.length,'str===>'); //长度为3
const buf2 = Buffer.alloc(12); //创建12字节的Buffer
buf2[0] = 111111;
console.log(buf2,'buf2===>');//07 00 00 00 00 00 00 00 00 00 00 00
07 为111111 转化为10进制的输出显示
const buf3 = Buffer.allocUnsafe(12); //创建12字节的Buffer 且内存空间不清除
文件系统fs(File System)
1.通过node来操作系统中的文件
2.使用文件系统需要引入fs模块,fs模块是核心模块,直接引用不用下载
3.fs中的模块都是分为同步和异步两种模式
-同步会阻塞程序的执行
-异步不会阻塞程序执行,操作完成时,通过回调函数返回结果
同步文件
1.打开文件
fs.openSync(path[, flags[, mode]]);
-path 要打开文件的路径
-flags 打开文件的操作类型
r 只读 read only
w 可写 write
-mode 文件的操作权限 一般不写
2.向文件写入内容
fs.writeSync(fd, string[, position[, encoding]])
-fd打开文件的引用
-string输入的内容
-position 占位符 写入起始的位置 (一般不写
-encoding 写入的编码 一般是'utf8' (一般不写
3.关闭文件
fs.closeSync(fd);
-fd要关闭的文件的引用
const fs = require('fs');
const fsb = fs.openSync('3.js','w');
fs.writeSync(fsb,'<div>这个是测试输入的啦~~~</div>',6);
fs.closeSync(fsb);
console.log('同步情况下, 此处代码最后执行')
异步文件
1.异步打开文件
异步调用的方法都是通过回调函数的参数获取的
fs.open(path[, flags[, mode]], callback);
-path 要打开文件的路径
-flags 打开文件的操作类型
r 只读 read only
w 可写 write
-mode 文件的操作权限 一般不写
-callback 回调函数
err 错误对象 没有错误则返回null
fd文件的描述符
2. 异步向文件写入内容
fs.write(fd, string[, position[, encoding]], callback)
-fd打开文件的引用
-string输入的内容
-position 占位符 写入起始的位置 (一般不写
-encoding 写入的编码 一般是'utf8' (一般不写
-callback(err) 回掉函数
3.异步关闭文件
fs.close(fd[, callback])
-fd打开文件的引用
-返回结果的回掉函数
fs.open('hello.js','w',function(err, fd){ //err 错误优先原则 fd打开文件的引用
if(!err){
fs.write(fd,'这个是异步写入的参数',function(err){
if(!err){
console.log('异步写入成功!');
}
fs.close(fd,function(err){
if(!err){
console.log('异步进程关闭成功!');
}
})
});
}
})
console.log('异步情况下, 此处代码比异步回掉函数先执行');
简单文件写入
fs.writeFile(file, data[, options], callback)
-file 要操作的文件的路径
-data写入的数据
-options 选项 可以对写入进行一些设置
-callback 当写入完成以后执行的函数
const fs = require('fs');
fs.writeFile('easy.js','这个是简单文件写入方式',function(err){
if(!err){
console.log('简单文件写入成功!');
}
})
打开状态
r只读
w写入
a追加
r 读取 文件不在报异常
r+ 读写 文件不在报异常
rs 在同步模式下打开文件用于读取
rs+ 在同步模式下打开文件用于读写
w 打开文件用于写操作,如果不存在则创建,存在则覆盖
wx 打开文件用于写操作 如果存在则打开失败
w+ 打开文件用于读写,如果不存在则创建,存在则覆盖
wx+ 打开文件用于读写,如果存在则打开失败
a 打开文件用于追加,不存在则创建
ax 打开文件用于追加 如果路径存在则失败
a+打开文件进行读取和追加,如果不存在则创建该文件
ax+ 打开文件进行读取喝追加,如果路径存在则失败
流式文件
/*
流式文件
fs.createWriteStream(path[, options])
-文件路径
-配置的参数
*/
/*
可以通过监听流的open和close事件的打开关闭
on 事件字符串,回调函数
-可以为对象绑定一个事件
once 事件字符串,回掉函数
-可以为对象绑定一个一次性函数,改事件会在触发一次以后自动失效
*/
const fs = require('fs');
const test = fs.createWriteStream('helle2.js');
test.once('open',function(){
console.log('流式文件打开啦');
});
test.once('close',function(){
console.log('流式文件关闭啦');
});
//通过test向文件中输出内容
test.write('今天周1~~')
test.write('今天周2~~')
test.write('今天周3~~')
test.write('今天周4~~')
test.write('今天周5~~')
//关闭流
test.end();
文件读取
同步文件读取
异步文件读取
简单文件读取
1.fs.readFile(path[, options], callback)
-path 路径
-options 选项的配置
-callback 回调函数,通过回调函数的将读取的内容返回(err, data)
err 错误优先
data 读取到的数据(Buffer 形式返回
2.fs.readFileSync(path[, options])
let fs = require('fs');
fs.readFile('3.js',function(err, data){ //取出
if(!err){
fs.writeFile('hello888.js',data,function(err){ //写入
if(!err){
console.log('文件写入成功!');
}
})
}
})
流式文件读取
流式文件读取也适用一些较大的文件,可以分多次将文件读取自内存中
let fs = require('fs');
//创建一个可读流
let rs = fs.createReadStream('3.js');
//创建一个可写流
let ws = fs.createWriteStream('hello888.js');
//如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
rs.on('data',function(data){
console.log(data,'data');
})
rs.once('open',function(){
console.log('可读流打开了~~');
});
rs.once('close',function(){
console.log('可读流关闭~~');
ws.end();
});
ws.once('open',function(){
console.log('可写流打开了~~~');
});
ws.once('close',function(){
console.log('可写流关闭了~~~');
});
//pipe可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws);
其他api
检查一个文件是否存在
fs.existsSync(path);
const path = require('path');
const isexist = fs.existsSync('999.js');
console.log(isexist, '查看文件是否存在'); //true
获取文件的详情,返回给我们一个对象,这个对象中保存了,当前对象状态的相关信息
fs.stat(path,callback);
fs.stat('简单文件.js', function (err, stat) {
if (!err) {
console.log(stat, '文件详情的data');
console.log(stat.isDirectory()); //isDirectory() 是否是文件夹
console.log(stat.isFile()); //isFile() 是否是文件
}
});
删除文件
fs.unlinkSync('1.js');
fsPromises.readdir(path[, options])
读取文件目录 files 读取文件目录,返回一个文件目录数组
fs.readdir('.', function (err, files) {
if (!err) {
console.log(files, 'files');
}
})
截断文件,将文件修改为指定大小(len为字符)
fs.truncateSync(path,len);
fs.truncateSync('hello.js',9);
创建文件夹
fs.mkdirSync('src2');
删除文件夹
fs.rmdirSync('src2');
文件重命名
fs.rename(oldPath, newPath, callback)
-oldPath 旧的路径
-newPath 新的路径
-callback回调函数
fs.rename('1.js','新的名字咯.js',function(err){
if(!err){
console.log('名字替换成功!');
}
})
fs.watchFile(filename[, options], listener)
监听文件改变
fs.watchFile(filename[, options], listener) //定时监控 耗费系统性能
-filename 文件名
-options 配置信息
-listener 回调函数
-curr 当前文件
-prev 之前文件大小 //可用stat里面的方法
fs.watchFile('简单文件.js', { interval: 1000 }, function (cur, pre) {
console.log('当前的文件大小', cur.size);
console.log('之前文件大小', pre.size);
})