一. path操作
1)path.resolve 它可以识别前边第一个参数有没有/如果没有就是根路径,如果第二个参数有/则由末尾参数的这个路径当作最终输出路径
const path = require('path');
const basePath = '/User/why'; const filename = 'abc.txt';
// const path = basePath + "/" + filename; //这种方式在不同的操作系统会出错
const filepath = path.resolve(basePath, filename)
2)path.join 简单的路径拼接不会从根路径识别,不挂第末尾参数的形式简单的进行路径拼接
用法同上
二. fs操作
const fs = require('fs');
1)读取文件
// 案例: 读取文件的信息 const filepath = "./abc.txt";
// 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("后续需要执行的代码");
2) 获取文件的信息
const fs = require('fs');
fs.open("./abc.txt", (err, fd) => { if (err) { console.log(err); return; }
// 通过描述符去获取文件的信息 fs.fstat(fd, (err, info) => { console.log(info); }) })
3)文件读写
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); });
4)文件夹操作
const fs = require('fs'); const path = require('path');
// 1.创建文件夹
const dirname = './why'; 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) { // // fs.stat(file) 可以, 但是有点麻烦 // if (file.isDirectory()) { // const filepath = path.resolve(dirname, file.name); // getFiles(filepath); // } else { // console.log(file.name); // } // } // }); // }
// getFiles(dirname);
// 3.重命名
fs.rename("./why", "./kobe", err => { console.log(err); })
三.文件夹的复制
四.events模块
1.基本使用
const EventEmitter = require("events");
// 1.创建发射器
const emitter = new EventEmitter();
// 2.监听某一个事件
// addListener是on的alias简写 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", "coderwhy", "james", "kobe");
emitter.off("click", listener2);
emitter.emit("click", "coderwhy", "james", "kobe"); }, 2000);
2.获取注册的事件
console.log(emitter.eventNames()); // 获取所有的注册事件 console.log(emitter.listenerCount("click")); // 获取click事件有几个 console.log(emitter.listeners("click")); // 获取具体的函数体
3.特殊的用法
// 只执行一次
emitter.once('click', (arg1, arg2, arg3) => { console.log("监听1到click事件", arg1, arg2, arg3); })
// 将本次监听放到最前面
emitter.prependListener('click', (arg1, arg2, arg3) => { console.log("监听3到click事件", arg1, arg2, arg3); })