node fs-extra

增强了fs模块,异步方法返回的是一个promise。

// 下载
npm i fs-extra -S
// 使用
const fse =  require('fs-extra');

1、复制

// 参一:原文件路径;参二:要拷贝的文件路径
fse.copy(orginUrl, destinationUrl)
.then(() => {})
.catch(err => {})
// 例:
fse.copy('./121.html', './1122111.html').then(() => {}).catch(err => {})

2、创建文件

如果文件夹不存在,会自动创建

// 参一:文件路径
fse.ensureFile(Url)
// 例:fse.ensureFile('./a/a13.txt').then().catch()

3、创建目录

// 参一:目录路径
fse.ensureDir(Url)
// 例:fse.ensureDir('./d').then().catch()

4、移动文件

相当于剪贴,剪贴的文件可更改名称

// 参数一:要移动的文件路径;参数二:移动到哪里路径
fse.move(orginUrl, destUlr).then().catch()
// 例:fse.move('./1.txt', './b/alias-1.txt').then().catch()

5、把内容写入文件

// 参一:要写入的文件,如果文件不存在会创建;参二:要写入的数据
fse.outputFile(FileUrl, content).then().catch()
// 例: fse.outputFile('./2.txt', '测试数据').then().catch()

小例子:

把网上图片链接爬取到本地:

const http = require('http');
const fse = require('fs-extra');
// 方法一:
http.get(url, res => {
    let rawData = "";
    // 一定要设置response的编码为binary否则会下载下来的图片打不开
    res.setEncoding('binary')
    // 当请求体数据到来时,该事件被触发,该事件一共参数chunk,表示接收到的数据
    res.on('data', chunk => {
        console.log(`接收到 ${chunk.length} 个字节数据`)
        rawData += chunk
    })
    // 当请求体数据传输完成时,该事件被触发,此后不会再有数据到来
    res.on('end', () => {
        try{
            fse.outputFile('./本地图片.jpg', rawData, {encoding: 'binary'}).then(r => {
                console.log('图片下载成功')
            })
        }catch(err) {
            console.log('err: ', err)
        }
    })
    res.on('close', () => {
        console.log('完成了')
    })
})
// 方法二:把接收到的数据转化为buffer
http.get(url, res => {
    let chunks = [];
    let size = 0;
    res.on('data', (chunk) => {
        // 在进行网络请求时,会不断接收到数据(数据不是一次性取到的),node会把接收到的数据
        // 片段逐段的保存在缓冲区(buffer),这些数据片段形成一个个缓冲对象(即buffer对象)
        // 而Buffer数据的拼接不能像字符串那样拼接(因为一个中文字符占三个字节),如果一个数
        // 据片段携带一个中文的两个字节,下一个数据片段携带着最后一个字节,直接字符串拼接会
        // 导致乱码,为了避免乱码,所以将得到的缓冲数据推入到chunks数组中。
        // 利用下边的node.js 内置的Buffer.concat()方法进行拼接。
        chunks.push(chunk)
        size += chunk.length
    })
    res.on('end', () => {
        let bufferData = Buffer.concat(chunks, size);
        fse.outputFile('./images.png', bufferData).then(r => console.log(r)).catch(err => console.log(err))
    })
})

6、把对象写入json文件

如果文件或者文件夹不存在,都会被创建

fse.outputJson(JsonFileUrl, jsonContent).then().catch
// 例:fse.outputJson('./a/b/c/.1.json', {name: 'lxc', age: 20}).then().catch()

7、把对象写入json文件

json文件不存在,会创建。与outputJson的区别是:如果路径中的文件夹不存在,会报错

fse.writeJson(JsonFileUrl, json_content).then().catch()
// 例:fse.writeJson('./1.json', {name: 'lxc'}).then().catch()

8、读取json内容

// 读取json文件
fse.readJson('./1.json').then().catch()

9、读取json内容

检查一个文件或目录是否存在,存在返回:true,不存在返回:false

// 返回true或false
fse.pathExists('./d').then(r => {
    console.log('r: ', r)
})

 10、清空一个目录下的文件及文件夹

// 把a目录下的所有文件及文件夹清空
fse.emptyDir('./a').then(r => {
    console.log('rra: ', r)
}).catch(err => {
    console.log('err: ', err)
})

 11、删除一个文件或文件夹

// 删除aa文件
fse.remove('./aa', (err) => {
    if(err) console.log(err)
})

 12、读取文件

读取结果为一个Buffer类型的数据

fse.readFile('./c.json').then(r => {
    console.log('buffer: ', r)
}).catch(err => {
    console.log('err: ', err)
})

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值