node初识

107 阅读7分钟

md 创建文件夹

rd 删除文件夹

E: 想进入哪个盘就哪个盘冒号

\

进程

-进程负责为程序的运行提供必备的环境

-进程就相当于工厂的车间 电脑程序(进程)很多会被挂起

线程

-线程计算机中最小的计算单位,线程负责执行进程中的程序

-线程就相当于工厂的工人 电脑程序(进程)等待线程处理

package.json 类似于简介有依赖等....

npm 命令

npm version 查看所有版本

npm init -y

npm install/i 包名

npm remove/r 包名

npm install --save 安装包并且添加到依赖中

npm install 包名 -g 全局安装 /(全局安装的包一般都是一些工具)

Buffer

  1. 数组中不能存储二进制文件,而Buffer就是专门存储二进制文件数据的 数据进入进出缓存区
  2. 在Buffer中存储的是二进制数据,但是在显示时都是以16进制显示
  3. Buffer的length是字节长度
  4. Buffer一旦创建大小无法修改 ,因为Buffer.alloc分配连续的内存空间
  5. 只要数字在控制台或页面中打印一定是都是以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
07111111 转化为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])
-文件路径
-配置的参数
*/
/*
可以通过监听流的openclose事件的打开关闭

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);
})