node.js的pat/fs/events模块以及磁盘遍历的实现
创始人
2024-04-08 10:29:20
0

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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...