删除文件
// 封装函数
// 删除非空文件夹
function removeDir(dir) {
// 清空文件夹
// 需要删除子目录
// 读取子目录
let arr = fs.readdirSync(dir)
// 循环遍历子目录
arr.forEach(v => {
// v 现在代表的是 子目录
// 需要获取正确的目录
// 拼接正确目录
v = dir + "/" + v
// 获取子目录信息
let info = fs.statSync(v)
// 判断是文件还是文件夹
if (info.isFile()) {
// 是文件
fs.unlinkSync(v)
} else {
// 是文件夹
// 递归
removeDir(v)
}
})
// 删除文件夹
fs.rmdirSync(dir)
}
复制文件
function copyDir(src, dest, size = 4 * 1024 * 1024) {
// 不存在就创建
!fs.existsSync(dest) && fs.mkdirSync(dest)
// 循环资子目录
fs.readdirSync(src).forEach(pathname => {
// 拼接路径
let midSrc = path.join(src, pathname)
let midDest = path.join(dest, pathname)
// 获取路径信息
let info = fs.statSync(midSrc)
// 判断是不是文件
if (info.isFile()) {
// 是文件
// 判断是不是大文件
// info.size 单位是 b
// 1mb = 1kb * 1024 = 1b * 1024 * 1024
// 4mb 算大文件
if (info.size > size) {
// 创建读取流
let read = fs.createReadStream(midSrc)
// 创建写入流
let write = fs.createWriteStream(midDest)
// 链接管道
read.pipe(write)
console.log('复制大文件' + '文件名字' + pathname);
} else {
// 小文件直接 复制
fs.copyFileSync(midSrc, midDest)
}
// 打印每一个名字 和大小
console.log('当前文件' + pathname + '文件大小' + info.size);
} else {
// 是文件夹
//递归
copyDir(midSrc, midDest, size)
}
})
}
文件转化json
function dirToJSON(dirname) {
// 读取目录信息
const info = fs.statSync(dirname);
// 文件
// 判断是不是文件
if (info.isFile()) {
return {
// 路径
pathname: dirname,
// 类型
type: 'file',
// 扩展名
ext: path.extname(dirname),
// 大小
size: info.size,
// 内容
content: fs.readFileSync(dirname, 'utf8')
}
// 文件夹
} else {
return {
// 目录
pathname: dirname,
// 类型
type: 'dir',
// 子目录
children: fs.readdirSync(dirname).map(v => {
// 拼接路径
v = path.join(dirname, v)
// 递归
return dirToJSON(v)
})
}
}
}
json转化文件
function JSONToDir(data) {
// 判断是文件夹
if (data.type === "dir") {
// 创建文件夹
fs.mkdirSync(data.pathname);
// 循环子目录 递归
data.children.forEach(v => JSONToDir(v))
// 是文件
} else if (data.type === "file") {
// 写入文件
fs.writeFileSync(data.pathname, data.content)
}
}