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

news2025/7/8 18:54:47

path模块:

概述:

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

导入path模块:

const path = require('path')

使用方法:

//导入对应的path模块
const path=require('path')
//相关方法
//1.join方法是将多个相关的地址连接成一个地址 (做路径拼接)
let pathStr=path.join('c://','/txt.txt')
console.log(pathStr);

//__dirname 全局变量表示当前的文件夹路径(绝对路径)
//__filename 全局变量表示当前的文件路径(绝对路径)
console.log(__dirname);
console.log(__filename);
console.log(path.join(__dirname,'hello'));

//normalize 默认返回对应的路径
console.log(path.normalize(__filename));

//resolve 返回一个路径地址 返回对应的一个路径 如果没有找到返回没有找到的路径
//根据一个相对路径返回一个聚堆路径
console.log(path.resolve(__filename,'/img.png','txt.txt'));

//isAbsolute 判断是否是一个绝对路径
console.log(path.isAbsolute(__dirname));

//relative 返回一个路径相对一个的路径   第一个是相对的路径 第二个是对应的路径
console.log(path.relative(__dirname,__filename));

//dirname 获取当前的文件夹名字
console.log(path.dirname(__dirname));

//获取当前的文件名
console.log(path.basename('c:hello/html.html'));

获取对应的扩展名
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使用相关方法:

//导入fs模块
const fs=require('fs')
const path=require('path')
//获取status对象 sync表示当前是同步的
let stats=fs.statSync(path.resolve('./hello.txt'))

//判断当前是否是一个文件夹
console.log(stats.isDirectory());

//判断当前是否是一个文件
console.log(stats.isFile());

//stats的相关属性
console.log(stats.birthtime); //创建时间
console.log(stats.atime);   //上一次修改的时间
console.log(stats.ctime);   //当前时间
console.log(stats.blksize);  //大小

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

readFile 异步读取文件

readFileSync 同步读取文件

fs.readFile('./hello.txt',(err,data)=>{
    if (err) {
        throw new Error(err)
    }
    console.log(data.toString());
})
//try 捕获错误 catch处理错误
try {
    let buffer=fs.readFileSync('./hello.txt')
    console.log(buffer.toString());
} catch (error) {
    console.log('文件读取错误');
}

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

readdir 异步读取文件夹

readdirSync  同步读取文件夹

fs.readdir('../day33 node模块/test',(err,files)=>{
    if (err) {
        throw new Error(err)
    }
    console.log(files);
})
//同步代码必须用try catch  (获取文件夹里面的文件名)
try {
    let files=fs.readdirSync('./test')
    console.log(files);
} catch (error) {
    console.log('文件读取错误');
}

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

writeFile 异步覆盖写入文件内容

writeFileSync 同步覆盖写入文件内容

appendFile 异步追加内容到文件

appendFileSync 同步追加内容到文件

//文件写入
//如果文件不存在会自动创建文件 (如果存在会覆盖)
fs.writeFile('./user.txt','你是屌丝吗',(err)=>{
    if (err) {
        throw new Error()
    }
    console.log('文件写入成功');
})
//同步
fs.writeFileSync('./hello.txt','你吃饭了没')

//追加内容
fs.appendFile('./hello.txt','我是追加的',()=>{
    console.log('文件追加成功');
})
fs.appendFileSync('./user.txt','追加的')

文件夹创建:

mkdir 异步创建文件夹

mkdirSync 同步创建文件夹

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

文件重新命名:

rename 异步更改名字

renameSync 同步更改名字

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

文件删除的相关方法:

unlink 删除文件

unlinkSync 同步删除文件

rm 删除文件

rmSync 同步删除文件

//删除文件以及文件夹
//unlink用来删除文件
fs.unlink('文件名',()=>{
    console.log('删除成功');
})
//rm rmSync 也是删除文件

// fs.rmdirSync('文件夹名') //删除文件夹
fs.rmdir('./新建文件夹',(err)=>{
    if (err) {
        throw new Error(err)
    }
    console.log('删除成功');
})

更改文件权限:

chown 异步更改随意者

chownSync 同步更改所有者

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

evets模块

核心对象EventEmitter(观察者)

on        监听事件

off        取消事件

emit        执行事件

once        监听事件一次

//导入events模块
//EventEmitter是一个类需要被实例化
const EventEmitter=require('events').EventEmitter
let eventEmitter=new EventEmitter()
//动用对应的方法
//事件名 处理函数
const handler=(...arg)=>{
    console.log(...arg);
    console.log('处理了对应的事件');
}
//事件名 处理函数
eventEmitter.on('abc',handler)
//取消事件
//eventEmitter.off('abc',handler)
//执行(emit方法传递的参股是会被传递给对应的处理函数)
eventEmitter.emit('abc',1,2,3)

//once执行异常
eventEmitter.once('asd',function(arg){
    console.log('执行一次内容'+arg);
})
//执行
eventEmitter.emit('asd','你好')

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

效果图:

直接上代码: 

//导入fs模块
const fs=require('fs')
const {join}=require('path')
//准备初始的文件夹和文件个数
let dirCount=0
let fileCount=0
//递归打印
const compute=(path)=>{
    try {
        //判断当前文件夹是否存在
    if ( !fs.existsSync(path)) return
    //读取当前文件夹的内容
    let files=fs.readdirSync(path) //呼气当前文件下的数组
    //遍历数组
    files.forEach(file=>{
        //判断当前file是否为文件夹
        //得到stats对象
        let stats=fs.statSync(join(path,file))
        //判断当前的路径是否为文件夹
        if (stats.isDirectory()) {
            console.log('文件夹有'+join(path,file));
            dirCount++
            //递归
            compute(join(path,file))
        } else{
            //如果是文件
            console.log('文件有'+join(path,file));
            fileCount++
        }
    })
    } catch (error) {}
}
//调用
compute('E:')
console.log(`文件夹数量为${dirCount},文件数量为${fileCount}`);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/6824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年下半年系统架构设计师下午真题及答案解析

试题一(25分) 某电子商务公司拟升级其会员与促销管理系统,向用户提供个性化服务,提高用户的粘性。在项目立项之初,公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性,由于当前用户规模不大,业务也相对…

2022年数维杯国际大学生数学建模挑战赛开赛公告

各参赛队伍: 为了保证2022年数维杯国际大学生数学建模挑战赛参赛队伍顺利参赛,现将竞赛开赛的相关事项通知如下: 一、时间节点 报名截止时间:北京时间2022年11月17日06:00(周四) 竞赛开始时间&#xff…

大半夜排查bug:竟然是同事把Redis用成这鬼样子,坑了我

首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象。 刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理。但是后来问题出现频率越来越频繁,越来越…

VSCode常用插件

目录1. 简体中文2. git3. 项目文件夹管理4. 文件图标主题5. markdown6. 主题7. Rest API 客户端1. 简体中文 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 2. git GitLens — Git supercharged 3. 项目文件夹管理 Project Manager,帮助…

MySQL增删改查语句练习(grade表,student表,subjects表,result表)

目录 问题描述 问题分析 1. 添加操作 2. 修改操作 3. 删除操作 问题实现 1. 添加测试数据 2. 根据题目要求完成crud操作 1. 将地址是西安市的更新为西安科技二路 2. 将S1001的email修改为空的字符串 3. 将第二门课的名字更新为 java基础,课时为60 &#…

基于ssm的固定收益营销系统设计与实现(ERP系统)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

5进程创建FORK

文章目录1. fork函数初识2. fork函数返回值1. fork函数初识 fork函数的作用从已存在的进程中创建一个新的进程,而新进程被称为子进程,原进程称为父进程,我们先看一下当执行fork后会发生什么. 分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子…

数据库管理系统

简介 数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。[2] 数据库管理系统是一个能够提供数据录入、修改、查询的数据操作软件&…

MySQL约束和表的复杂查询操作

✨博客主页: 心荣~ ✨系列专栏:【MySQL】 ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录一. 数据库约束1. 数据库常用约束2. not null 约束3. unique约束4. default设置默认值5. primary key约束6. 分库分表下的自增主键7. foreign key约束8. 主键,外键,uniqe运用原理二. …

Android App开发中使用Glide加载网络图片讲解及实战(附源码 简单易懂)

运行有问题或需要源码请点赞关注收藏~~~ 一、使用Glide加载网络图片 对于如何方便快速的显示网络图片,谷歌开发了自己的Glide开源库,同样我们需要在bulid.gradle中引入如下依赖 implementationcom.github.bumptech.glide:glide:4.11.0 Glide用法如下 G…

攻防世界-misc-流量分析1

下载附件,获得一个流量包 wireshark打开 随便选择一个,追踪tcp流 把请求包url解码看看是什么操作 还存在url编码,继续解码 GET /index.php?urlgopher://127.0.0.1:80/_POST /admin.php HTTP/1.1 Host: localhost:80 Connection: close Conte…

SpringBoot+@Validated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel数据并校验为例

场景 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出: 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出_霸道流氓气质的博客-CSDN博客 SpringBootVue实现excel导入带格式化的时间参数(moment格式化明天日…

使用image-map编写校区平面示意图

一、效果图 先上一波效果图,手机录制 二、项目中用到的图片 呐,最近领导让俺帮某学校做一个校区平面示意图的移动端项目,用到的图片就是这样的,不过这是截的图片,放大后会模糊,项目中真正使用的图片有6…

HazelEngine 学习记录 - Profiling

Profiling Intro To Profiling 为了能够清晰的观察整个引擎的性能消耗情况,我们需要一个可视化的工具来进行性能分析,例如 Unity 的内置 Profiler: 其实本质就是将每个函数运行的时间进行可视化,这里我们借用标准库 chrono 来进…

笔记本电脑没有声音如何解决

​笔记本电脑没有声音的现象,也是笔记本电脑的常见运用病况之一,遇到这种情况的话,大家是否知道如何处理呢?下面小编来跟大家说说笔记本电脑没有声音解决方法,希望可以帮助到大家。 工具/原料: 系统版本:windows10系统 品牌型…

python--谷歌恐龙快跑小项目

用300行代码左右实现谷歌休闲的恐龙快跑游戏! 主函数: import sys import math import time import random import pygame from pygame.locals import * from Scene import Scene from Obstacle import Plant, Ptera from Dinosaur import Dinosaur #…

嵌入式开发:当用微控制器构建嵌入式GUI时,有哪些注意事项

在嵌入式开发中,借助基于MCU的设计,你可以消除额外的RAM和闪存芯片,并使用板载外设而不是板外逻辑,所有这些都将随着当今功能强大的芯片而变得更加简单。当然,与成熟的微处理器相比,MCU本身也提供了额外的成…

【校内篇】如何安装一台虚拟机

咱们的微机老师要求上微机课用的电脑必须要用 Windows7Windows\ 7Windows 7,但是很多同学的电脑也许并不匹配,造成了诸多不便。 作为班长,我觉得有必要把自己的一些技术共享给大家,方便大家使用。 文章目录一、准备材料&#x1f6…

如何扩大电脑c盘分区,c盘空间不足怎么扩容

当电脑使用一段时间后,C盘会存储一定的数据,包括操作系统以及其他的文件。在实际的运用中,许多应用程序的默认下载路径就是C盘,如果用户没有更改为其他磁盘,会导致C盘的空间越来越小,电脑越来越卡顿。从根源…

【C版本】静态通讯录与动态通讯录的实现,以及各自所存在的缺陷对比。(含所有原码)

目录静态版本通讯录前期思路具体实现1、框架2、初始化通讯录3、增加联系人4、显示已有联系人5、查找联系人6、删除指定联系人7、排序联系人8、修改联系人信息9、清空联系人静态版本通讯录存在的缺陷动态版本通讯录(静态版本的部分功能发生改动)初始化增加…