fs 模块部分功能方法
-
fs.stat
检测是文件还是文件夹;
-
fs.mkdir
创建文件夹;
-
fs.writeFile
创建并写入文件;
-
fs.appendFile
追加文件;
-
fs.readFile
读取文件;
-
fs.readdir
读取文件夹;
-
fs.rename
重命名;
-
fs.rmdir
删除文件夹;
-
fs.unlink
删除文件;
-
fs.createReadStream
以流的方式读取文件;
-
fs.createWriteStream
以流的方式写入文件;
-
管道流
···
1. fs.stat 检测是文件还是文件夹
fs.stat('./package.json', (err, data) => {
if (err) {
console.log('错误:', err)
return
}
console.log(`是文件:${data.isFile()}`)
console.log(`是文件夹:${data.isDirectory()}`)
})
/*
是文件:true
是文件夹:false
*/
2. fs.mkdir 创建文件夹
/**
* path 要创建的文件夹路径
* mode 目录权限(读写权限),默认777(可不写)
* callback 回调,
*/
fs.mkdir('./css', (err) => {
if (err) {
console.log('创建失败:', err)
return
}
console.log('创建成功')
})
3. fs.writeFile 写入文件
/**
* path 文件名称
* data 要写入的数据
* options
* · encoding 可选,默认 'utf-8
* · mode 文件夹读写权限,默认 438
* · flag 默认 'w'
* callback 回调
*/
// 若当前文件存在,则会直接替换掉之前的文件
fs.writeFile('./view/index.html', '呐,这个就叫专业', (err) => {
if (err) {
console.log(`创建写入失败:${err}`)
return
}
console.log('创建写入成功')
})
4. fs.appendFile 追加文件
// fs.appendFile 追加文件,若没有该文件将会创建该文件并添加内容,若有该文件将会在该文件内追加内容
fs.appendFile('./css/aaa.css', '* {margin: 0; padding: 0}', (err) => {
if (err) {
console.log('追加失败:', err)
return
}
console.log('追加成功')
})
5. fs.readFile 读取文件
fs.readFile('./view/index.html', (err, data) => {
if (err) {
console.log('读取失败', err)
return
}
// 读取到的 data 是一个 buffer 类型
console.log('读取成功:', data)
// 转换成 string 类型
console.log(data.toString())
})
// 读取成功: <Buffer e5 91 90 ef bc 8c e8 bf 99 e4 b8 aa e5 b0 b1 e5 8f ab e4 b8 93 e4 b8 9a>
// 呐,这个就叫专业
6. fs.readdir 读取文件夹
/*
读取后,文件夹内部文件将会以 数组 形式的得到 文件 以及 文件夹
带有 后缀 的是 文件,不带后缀的是文件夹
*/
fs.readdir('./view', (err, data) => {
if (err) {
console.log('读取失败:', err)ke
return
}
console.log('读取成功:', data)
})
// 读取成功:[ 'home', 'index.html' ]
7. rename 重命名,移动文件
// fs.rename 1:用于重命名;2:移动文件
/**
* oldPath:原始路径
* newPath:新路径
* callback:回调函数
*/
fs.rename('./css/aaa.css', './css/index.css', (err) => {
if (err) {
console.log('重命名失败:', err)
return
}
console.log('重命名成功')
})
// 移动文件
fs.rename('./css/index.css', './view/index.css', (err) => {
if (err) {
console.log('移动失败:', err)
return
}
console.log('移动成功')
})
8. fs.rmdir 删除文件夹
/*
fs.rmdir 删除文件夹(文件夹内部必须为空才可删除成功)
如果要删除的文件夹内部有文件则会删除失败
应当先输出文件夹内部的 文件 以及 文件夹(内部有文件则递归到内部向外一层层删除)
*/
fs.rmdir('./aaa', (err) => {
if (err) {
console.log('删除失败:', err)
return
}
console.log('删除成功')
})
9. fs.unlink 删除文件
fs.unlink('./aaa/index.html', (err) => {
if (err) {
console.log('删除失败:', err)
return
}
console.log('删除文件成功')
})
简单示例
// 创建文件夹
const fs = require('fs')
const path = './upload'
const fs = require('fs')
const path = './upload'
fs.stat('./upload', (err, data) => {
if (err) { // 没有对应的文件或文件夹,则创建文件夹
mkdir(path)
return
}
// 不是文件夹,先删除再创建
if (!data.isDirectory()) {
fs.unlink(path, (err) => {
if (!err) mkdir(path)
})
}
})
// 创建文件夹
function mkdir(dir) {
fs.mkdir(dir, (err) => {
if (err) {
console.log('创建文件夹失败')
return
}
})
}
10. fs.createReadStream 以流的方式读取文件(常用于读取一些大文件)
const fs = require('fs')
// fs.createReadStream 以流的方式读取文件
const readStream = fs.createReadStream('./data/test.txt')
let str = ''
let count = 0
// 监听读取(以流的方式读取,一点一点的读取)
readStream.on('data', (data) => {
str += data
count += 1
})
// 监听读取结束
readStream.on('end', () => {
console.log(str)
console.log(count)
console.log('结束')
})
// 监听错误
readStream.on('error', (err) => {
console.log('读取错误', err)
})
11. fs.createWriteStream 以流的方式写入文件
const fs = require('fs')
let str = ''
for (let i = 0; i < 500; i++) {
str += '从库里获取的数据,保存起来\n'
}
// 若该文件不存在,则会创建并写入该文件,若存在则会直接替换该文件
const writeStream = fs.createWriteStream('./data/write.txt')
// 写入文件
writeStream.write(str)
// 标记文件末尾,该方法必须加上,否侧无法触发 监听写入完成方法
writeStream.end()
// 监听写入完成
writeStream.on('finish', () => {
console.log('完成')
})
12. 管道流
// 主要用于大文件的复制
const fs = require('fs')
// 创建读取流
const readStream = fs.createReadStream('./data/test.txt')
// 创建写入流
const writeStream = fs.createWriteStream('./data/write01.txt')
// 管道读写操作
readStream.pipe(writeStream)
console.log('读写完毕')
// 读写图片
const fs = require('fs')
// 创建读取流
const readStream = fs.createReadStream('./001.jpg')
// 创建写入流
const writeStream = fs.createWriteStream('./data/001.jpg')
readStream.pipe(writeStream)
console.log('读写完毕')