增强了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)
})