Node内置模块之path,fs,events

path

拼接路径

const path = require('path');
const basePath = '/User/lsh';
const filename = 'abc.txt';

方法1拼接
const filepath1 = path.resolve(basePath, filename);
方法2拼接
const filepath2 = path.join(basepath, filename);

得到的结果都是
../User/lsh/abc.txt

resolve和join的区别,resolve会判断拼接的路径字符串中,是否有以/或./或…/开头的路径

fs

fs的三种使用方式

1.同步操作

const info = fs.statSync(filepath);
console.log("后续需要执行的代码");    //先打印
console.log(info);

2.异步操作

fs.stat(filepath, (err, info) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(info);
  console.log(info.isFile());
  console.log(info.isDirectory());
});
console.log("后续需要执行的代码");  //先打印

3.Promise

fs.promises.stat(filepath).then(info => {
  console.log(info);
}).catch(err => {
  console.log(err);
});
console.log("后续需要执行的代码");  //先打印

文件描述符

const fs = require('fs');

fs.open("./abc.txt", (err, fd) => {
  if (err) {
    console.log(err);
    return;
  }

  // 通过描述符去获取文件的信息
  fs.fstat(fd, (err, info) => {
    console.log(info);
  })
})

文件的读写

const fs = require('fs');


// 1.文件写入
const content = "你好";

 fs.writeFile('./abc.txt', content, {flag: "a"}, err => {
  console.log(err);
 });

// 2.文件读取
fs.readFile("./abc.txt", {encoding: 'utf-8'}, (err, data) => {
  console.log(data);
});

文件夹操作

扫描二维码关注公众号,回复: 12443324 查看本文章
const fs = require('fs');
const path = require('path');

1.创建文件夹

const dirname = './lsh';
//判断文件夹是否存在
if (!fs.existsSync(dirname)) {
  fs.mkdir(dirname, err => {
    console.log(err);
  });
}

2.读取文件夹中的所有文件

fs.readdir(dirname, (err, files) => {
  console.log(files);
});

function getFiles(dirname) {
  fs.readdir(dirname, { withFileTypes: true }, (err, files) => {
    for (let file of files) {
      //判断是否是一个文件夹
      if (file.isDirectory()) {
        const filepath = path.resolve(dirname, file.name);
        getFiles(filepath);
      } else {
        console.log(file.name);
      }
    }
  });
}

getFiles(dirname);

3.重命名,前面为旧,后面为新

fs.rename("./lsh", "./james", err => {
  console.log(err);
})

events

const EventEmitter = require("events");

events基础方法

1.创建发射器

const emitter = new EventEmitter();

2.监听某一个事件

emitter.on('click', (args) => {
  console.log("监听1到click事件", args);
})

const listener2 = (args) => {
  console.log("监听2到click事件", args);
}
emitter.on('click', listener2)

3.发出一个事件

setTimeout(() => {
  emitter.emit("click", "lsh", "james", "kobe");
  emitter.off("click", listener2);
  emitter.emit("click", "lsh", "james", "kobe");
}, 2000);

events获取信息

1.创建发射器

const emitter = new EventEmitter();

2.监听某一个事件

emitter.on('click', (args) => {
  console.log("监听1到click事件", args);
})

const listener2 = (args) => {
  console.log("监听2到click事件", args);
}
emitter.on('click', listener2)

emitter.on("tap", (args) => {
  console.log(args);
})

3.获取注册的事件

console.log(emitter.eventNames());
console.log(emitter.listenerCount("click"));
console.log(emitter.listeners("click"));

events不常用方法

1.创建发射器

const emitter = new EventEmitter();

2.监听某一个事件

emitter.once('click', (arg1, arg2, arg3) => {
  console.log("监听1到click事件", arg1, arg2, arg3);
})

const listener2 = function(arg1, arg2, arg3) {
  // 特点: 绑定this, 也不绑定arguments数组
  console.log(arguments);
  console.log(this);
  console.log("监听2到click事件", arg1, arg2, arg3);
}

emitter.on('click', listener2)

// 将本次监听放到最前面
emitter.prependListener('click', (arg1, arg2, arg3) => {
  console.log("监听3到click事件", arg1, arg2, arg3);
})

emitter.on("scroll", (args) => {
  console.log("监听到scroll方法");
})

3.发出一个事件

setTimeout(() => {
  // emitter.removeAllListeners("click");
  emitter.emit("click", "lsh", "james", "kobe");
  emitter.emit("click", "lsh", "james", "kobe");
  emitter.emit("scroll", "lsh", "james", "kobe");
}, 2000);

console.log(arguments);
console.log(this);

猜你喜欢

转载自blog.csdn.net/weixin_45389051/article/details/109155695