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

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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值