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'));
join 地址拼接
dirname 获取当前文件夹地址
basename 获取当前的文件名
extname 获取当前的扩展名
resolve 转成绝对路径
relative 转成相对路径
normalize 默认
isAbsolute 判断是否为绝对路径
__dirname 获取当前的文件夹路径
__filename 获取当前的文件路径
fs(fileSystem) 文件系统 , 主要对文件以及文件夹的增删查改
const fs = require('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); //大小
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可读可写可执行
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模块
- 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}`);