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