node.js fs模块学习

const fs = require('fs')
// 1:文件写入
    // fs.writeFile也可以变为文件插入操作的api,在第三个参数位置加{flag:'a'}
    // fs.writeFile('./testFs.txt','writeFile对于js主线程来说是一个异步的过程',(msg)=>{
    //     //成功msg返回null,失败msg返回错误信息
    //     console.log(msg)
    // })
    // console.log('此时我这里的console.log先打印')
        
    //writeFile,writeFileSync会直接覆盖文件
    // fs.writeFileSync('./testFs.txt','writeFileSync对于js主线程来说是一个同步的过程')
    // console.log('因为此时对应js来说,是一个同步的过程,这里的console.log慢打印')


// 2:文件插入
    //文件插入操作(异步)
    // fs.appendFile('./testFs.txt',',这句话是通过appendFile这个API插入进来的',err=>{
    //     if(err){
    //         console.log('文字追加失败')
    //         return false
    //     }
    //     console.log('文字追加成功')
    // })
    // 文件插入操作(同步)\r\n实现换行
    // fs.appendFileSync('./testFs.txt',',\r\n这段话是通过appendFileSync这个API插入进来的')


// 3:文件流式写入 
    //createWiteStream-文件流式写入
    //程序打开是需要消耗资源的,流式写入可以减少打开或关闭的次数,相当于打电话,一直通话的模式
    //let ws = fs.createWriteStream('./testFs.txt')//创建通道,可以持续写入
    //持续输入
    // ws.write('锄禾日当午\r\n')
    // ws.write('汗滴禾下土\r\n')
    // ws.write('谁知盘中餐\r\n')
    // ws.write('粒粒皆辛苦\r\n')
    //关闭通道
    // ws.end()


//4:文件读取(一次读全部)
    //文件读取(异步)
    // fs.readFile('./testFs.txt',(err,data)=>{
    //     if(err){
    //         console.log('文件读取异常',err)
    //         return false
    //     }
    //     //data是Buffer格式,可以用toString()以UTF-8形式读取转换出来
    //     console.log(data.toString())
    // })

    //文件读取(同步)
    // let data = fs.readFileSync('./testFs.txt')
    // console.log(data.toString())
    

// 5.文件流式读取(一块块读)
    // let rs = fs.createReadStream('./testFs.txt')
    // //绑定data事件(一定)
    // rs.on('data',chunk=>{//chuck:块儿,大块儿
    //     console.log(chunk.length)//chunk大小官方文档已定好,最大65546字节 => 64KB数据量
    // })
    // //绑定end事件(可选)
    // rs.on('end',()=>{
    //     console.log('读取完成')
    // })


// 6.文件重命名/移动  
    // fs.rename('./testFs.txt','studyFs.txt',err=>{
    //     if(err){
    //         console.log('重命名失败')
    //         return false
    //     }
    //     console.log('重命名成功')
    // })

    // fs.rename('./testFs.txt','././studyFs.txt',err=>{
    //     if(err){
    //         console.log('移动失败')
    //         return false
    //     }
    //     console.log('移动成功')
    // })


// 7.删除文件(unlink/rm都可以,只不过rm这个方法得在node14.4及以上才有)
    // fs.unlink('./studyFs.txt',err=>{
    //     if(err){
    //         console.log('删除失败')
    //         return false
    //     }
    //     console.log('删除成功')
    // })


// 8.文件夹操作   
    // fs.mkdir('../node.js学习/创建文件夹',err=>{
    //     if(err){
    //         console.log(err)
    //         return
    //     }
    //     console.log('创建成功')
    // })

    //递归创建(a,b都没有的情况下,直接创建c,需要加个参数 recursive)
    // fs.mkdir('./a/b/c',{recursive:true},err=>{
    //     if(err){
    //         console.log(err)
    //         return
    //     }
    //     console.log('创建成功')
    // })

    //读取文件夹
    // fs.readdir('../node.js学习',(err,data)=>{
    //     if(err){
    //         console.log(err)
    //         return
    //     }
    //     console.log('读取成功',data)
    // })

    //删除文件夹(同理递归删除的话,加一个参数{recursive:true},但递归删除的不建议用rmdir,跟建议直接用rm)
    // fs.rmdir('./创建文件夹',err=>{
    //     if(err){
    //         console.log(err)
    //         return
    //     }
    //     console.log('删除成功')
    // })


// 9.查看资源状态
    // fs.stat('./2.fs.js',(err,data)=>{
    //     if(err){
    //         console.log(err)
    //         return
    //     }
    //     console.log(data.isFile())//查看资源是否是文件
    //     console.log(data.isDirectory())//查看资源是否是文件夹
    // })


// 10.fs相对路路径参照物:命令行的工作目录(就是那个 ./ 所在的那个目录)
//    绝对路径,更稳妥些,但绝对路径太长,可用__dirname这个'全局变量',保存的是:所在文件的所在目录的绝对路径
//    console.log(__dirname)
//    fs.appendFileSync(__dirname+'/index.html','测试')



//练习-批量重命名
let dir = fs.readdirSync('./code')
dir.forEach(item=>{
    let data = item.split('-')
    let [num,name] = data
    if(+num<10){
        num='0'+num
    }
    //创建新的文件名
    let newName = num+'-'+name
    //重命名
    fs.renameSync(`./code/${item}`,`./code/${newName}`)
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值