• node.js的pat/fs/events模块以及磁盘遍历的实现


    path模块:

    概述:

    path模块是一个内置模块,他里面内置的相关方法来造作的路径地址

    导入path模块:

    const path = require('path')

    使用方法:

    1. //导入对应的path模块
    2. const path=require('path')
    3. //相关方法
    4. //1.join方法是将多个相关的地址连接成一个地址 (做路径拼接)
    5. let pathStr=path.join('c://','/txt.txt')
    6. console.log(pathStr);
    7. //__dirname 全局变量表示当前的文件夹路径(绝对路径)
    8. //__filename 全局变量表示当前的文件路径(绝对路径)
    9. console.log(__dirname);
    10. console.log(__filename);
    11. console.log(path.join(__dirname,'hello'));
    12. //normalize 默认返回对应的路径
    13. console.log(path.normalize(__filename));
    14. //resolve 返回一个路径地址 返回对应的一个路径 如果没有找到返回没有找到的路径
    15. //根据一个相对路径返回一个聚堆路径
    16. console.log(path.resolve(__filename,'/img.png','txt.txt'));
    17. //isAbsolute 判断是否是一个绝对路径
    18. console.log(path.isAbsolute(__dirname));
    19. //relative 返回一个路径相对一个的路径 第一个是相对的路径 第二个是对应的路径
    20. console.log(path.relative(__dirname,__filename));
    21. //dirname 获取当前的文件夹名字
    22. console.log(path.dirname(__dirname));
    23. //获取当前的文件名
    24. console.log(path.basename('c:hello/html.html'));
    25. 获取对应的扩展名
    26. console.log(path.extname('c:hello/txt.txt'));
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    path模块的相关方法总结:

    join        地址拼接

    dirname        获取当前文件夹地址

    basename        获取当前的文件名

    extname        获取当前的扩展名

    resolve        转成绝对路径

    relative        转成相对路径

    normalize        默认

    isAbsolute        判断是否为绝对路径

    __dirname        获取当前的文件夹路径

    __filename        获取当前的文件路径

    fs模块:

    fs(fileSystem) 文件系统 , 主要对文件以及文件夹的增删查改

    导入:

    const fs = require('fs')

    fs使用相关方法:

    1. //导入fs模块
    2. const fs=require('fs')
    3. const path=require('path')
    4. //获取status对象 sync表示当前是同步的
    5. let stats=fs.statSync(path.resolve('./hello.txt'))
    6. //判断当前是否是一个文件夹
    7. console.log(stats.isDirectory());
    8. //判断当前是否是一个文件
    9. console.log(stats.isFile());
    10. //stats的相关属性
    11. console.log(stats.birthtime); //创建时间
    12. console.log(stats.atime); //上一次修改的时间
    13. console.log(stats.ctime); //当前时间
    14. console.log(stats.blksize); //大小

    文件的相关操作: (返回一个buffer类型数据)

    readFile 异步读取文件

    readFileSync 同步读取文件

    1. fs.readFile('./hello.txt',(err,data)=>{
    2. if (err) {
    3. throw new Error(err)
    4. }
    5. console.log(data.toString());
    6. })
    7. //try 捕获错误 catch处理错误
    8. try {
    9. let buffer=fs.readFileSync('./hello.txt')
    10. console.log(buffer.toString());
    11. } catch (error) {
    12. console.log('文件读取错误');
    13. }

    文件夹读取相关操作:(返回第一层的文件名字的字符串数组)

    readdir 异步读取文件夹

    readdirSync  同步读取文件夹

    1. fs.readdir('../day33 node模块/test',(err,files)=>{
    2. if (err) {
    3. throw new Error(err)
    4. }
    5. console.log(files);
    6. })
    7. //同步代码必须用try catch (获取文件夹里面的文件名)
    8. try {
    9. let files=fs.readdirSync('./test')
    10. console.log(files);
    11. } catch (error) {
    12. console.log('文件读取错误');
    13. }

    文件写入相关操作 (当没有文件会自动创建文件)

    writeFile 异步覆盖写入文件内容

    writeFileSync 同步覆盖写入文件内容

    appendFile 异步追加内容到文件

    appendFileSync 同步追加内容到文件

    1. //文件写入
    2. //如果文件不存在会自动创建文件 (如果存在会覆盖)
    3. fs.writeFile('./user.txt','你是屌丝吗',(err)=>{
    4. if (err) {
    5. throw new Error()
    6. }
    7. console.log('文件写入成功');
    8. })
    9. //同步
    10. fs.writeFileSync('./hello.txt','你吃饭了没')
    11. //追加内容
    12. fs.appendFile('./hello.txt','我是追加的',()=>{
    13. console.log('文件追加成功');
    14. })
    15. fs.appendFileSync('./user.txt','追加的')

    文件夹创建:

    mkdir 异步创建文件夹

    mkdirSync 同步创建文件夹

    1. //创建文件夹 mkdir
    2. fs.mkdir('新建文件夹',()=>{
    3. console.log('创建文件夹成功');
    4. })
    5. //判断当前的 文件夹是否存在
    6. console.log(fs.existsSync);
    7. if (!fs.existsSync('新建文件夹')) {
    8. fs.mkdirSync('新建文件夹')
    9. }

    文件重新命名:

    rename 异步更改名字

    renameSync 同步更改名字

    1. //更改文件夹名
    2. fs.rename('新建文件夹','当前文件夹',()=>{
    3. console.log('更改名字成功');
    4. })
    5. //更改文件名字
    6. // fs.renameSync('./test/你好.txt','./test/hello.txt')

    文件删除的相关方法:

    unlink 删除文件

    unlinkSync 同步删除文件

    rm 删除文件

    rmSync 同步删除文件

    1. //删除文件以及文件夹
    2. //unlink用来删除文件
    3. fs.unlink('文件名',()=>{
    4. console.log('删除成功');
    5. })
    6. //rm rmSync 也是删除文件
    7. // fs.rmdirSync('文件夹名') //删除文件夹
    8. fs.rmdir('./新建文件夹',(err)=>{
    9. if (err) {
    10. throw new Error(err)
    11. }
    12. console.log('删除成功');
    13. })

    更改文件权限:

    chown 异步更改随意者

    chownSync 同步更改所有者

    1. //更改所有者
    2. fs.chown('./test/hello.txt',1,6,()=>{
    3. console.log('所有者更改');
    4. })
    5. //更改文件权限 777可读可写可执行

    evets模块

    核心对象EventEmitter(观察者)

    on        监听事件

    off        取消事件

    emit        执行事件

    once        监听事件一次

    1. //导入events模块
    2. //EventEmitter是一个类需要被实例化
    3. const EventEmitter=require('events').EventEmitter
    4. let eventEmitter=new EventEmitter()
    5. //动用对应的方法
    6. //事件名 处理函数
    7. const handler=(...arg)=>{
    8. console.log(...arg);
    9. console.log('处理了对应的事件');
    10. }
    11. //事件名 处理函数
    12. eventEmitter.on('abc',handler)
    13. //取消事件
    14. //eventEmitter.off('abc',handler)
    15. //执行(emit方法传递的参股是会被传递给对应的处理函数)
    16. eventEmitter.emit('abc',1,2,3)
    17. //once执行异常
    18. eventEmitter.once('asd',function(arg){
    19. console.log('执行一次内容'+arg);
    20. })
    21. //执行
    22. eventEmitter.emit('asd','你好')

    fs模块做磁盘遍历文件以及文件夹

    效果图:

    直接上代码: 

    1. //导入fs模块
    2. const fs=require('fs')
    3. const {join}=require('path')
    4. //准备初始的文件夹和文件个数
    5. let dirCount=0
    6. let fileCount=0
    7. //递归打印
    8. const compute=(path)=>{
    9. try {
    10. //判断当前文件夹是否存在
    11. if ( !fs.existsSync(path)) return
    12. //读取当前文件夹的内容
    13. let files=fs.readdirSync(path) //呼气当前文件下的数组
    14. //遍历数组
    15. files.forEach(file=>{
    16. //判断当前file是否为文件夹
    17. //得到stats对象
    18. let stats=fs.statSync(join(path,file))
    19. //判断当前的路径是否为文件夹
    20. if (stats.isDirectory()) {
    21. console.log('文件夹有'+join(path,file));
    22. dirCount++
    23. //递归
    24. compute(join(path,file))
    25. } else{
    26. //如果是文件
    27. console.log('文件有'+join(path,file));
    28. fileCount++
    29. }
    30. })
    31. } catch (error) {}
    32. }
    33. //调用
    34. compute('E:')
    35. console.log(`文件夹数量为${dirCount},文件数量为${fileCount}`);

  • 相关阅读:
    【前端知识】前端加密算法(base64、md5、sha1、escape/unescape、AES/DES)
    第四章:Java逻辑控制
    《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试
    Rt-Thread 定时器
    pytorch编程用法记录
    ESP8266-Arduino编程实例-ISL29125 RGB颜色光传感器驱动
    姓名缘分查询易语言代码
    lv5 嵌入式开发-7 有名管道和无名管道
    【大画数据结构】第二话 —— 无头单链表的基本操作
    终于来了,电力铁塔远程维护解决方案
  • 原文地址:https://blog.csdn.net/ITjun666/article/details/127872260