fs+es6 class类实现文件的拷贝与找目录中的最大文件

const {join, basename} = require('path');
const {readdirSync, statSync, existsSync, mkdirSync, readFileSync, writeFileSync, createReadStream, createWriteStream} = require('fs');
/**
 * [FileSystem] 用于找到文件夹内深层嵌套的所有文件
 * @params [src] 目标文件夹
 */
class FileSystem {
    constructor(src){
        this.fileArr = [];
        this.src = src;
        this.init(src);
    }
    init(src){
        readdirSync(src).forEach(file=>{
            const pathname = join(src, file);
            if (statSync(pathname).isFile()){
                this.fileArr.push(pathname)
            } else {
                this.init(pathname);
            }
        })
    }
}
// new FileSystem('./src');

/**
 * [CopyFile] 继承于FileSystem构造函数,先找到文件夹内所有文件,再判断大小,大文件以流的方式拷贝到big目录,小文件拷贝到small目录
 * @params [src] 目标文件夹
 */
class CopyFile extends FileSystem {
    constructor (src) {
        super(src);
        this.copy()
    }
    copy(){
        this.fileArr.forEach(file=>{
            if (statSync(file).size / 1024 / 1024 > 100) { // 大于100MB是大文件
                // 大
                this.createDir('big');
                createReadStream(file).pipe(createWriteStream(join('big',  basename(file))))
            } else {
                // 小
                this.createDir('small');
                writeFileSync(join('small', basename(file)), readFileSync(file))
            }
        })
    }
    createDir(dist) {
        if (!existsSync(dist)) {
            mkdirSync(dist);
        }
    }
}
new CopyFile(join(__dirname, 'src'))


/**
 * [FileBiggerFile] 继承于FileSystem构造函数,用于找到深层嵌套的文件目录中最大的文件
 * @params [src] 目标文件夹
 */
class FileBiggerFile extends FileSystem{
    constructor (src) {
        super(src);
        this.find();
    }
    find(){
        const sizes = this.fileArr.map(val => statSync(val).size);
        const bigger = sizes.reduce((cur, next)=>{
            if (cur > next) {
                return cur;
            }
            return next;
        })
        return this.fileArr[sizes.indexOf(bigger)]
    }
}
new FileBiggerFile(join(__dirname, 'src'));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值