使用Netty作为底层框架,作为文件上传系统。SpringBoot+Netty+SpringTask

只要涉及到网络通信,选择Netty就对了。

由于公司使用的SQLServer数据库并要求每天能够定时定点的将备份异地部署到其它服务器,同时也要求其它的数据库备份能上传到当前服务器。

现在做一下任务分解

1、根据指定的目录筛选出最新的备份。

2、要求客户端有能力向服务器发送备份。

3、同时也要求服务端也可以发送备份给客户端,做彼此的好基友。

本篇文章主要讲述如何能快速从指定的文件夹中选择出最新的备份。

1)文件夹中既包含文件夹,也包含文件。在选择时一定要判断清楚,如果是文件夹应该采用递归的方式再进行子文件夹筛选。

2)如果是文件,需要判断文件的后缀,命名方式是否符合系统备份定义的规则。

3)从1.7开始,Java为了加快对文件的处理,

     Java NIO 类  package java.nio.file 提供了多种方法来处理文件系统中的文件。比直接使用

file方便的多。

示例代码

public static Path copy(Path source, Path target, CopyOption... options)
        throws IOException
    {
        FileSystemProvider provider = provider(source);
        if (provider(target) == provider) {
            // same provider
            provider.copy(source, target, options);
        } else {
            // different providers
            CopyMoveHelper.copyToForeignTarget(source, target, options);
        }
        return target;
    }
public static Path move(Path source, Path target, CopyOption... options)
        throws IOException
    {
        FileSystemProvider provider = provider(source);
        if (provider(target) == provider) {
            // same provider
            provider.move(source, target, options);
        } else {
            // different providers
            CopyMoveHelper.moveToForeignTarget(source, target, options);
        }
        return target;
    }

具体使用请查看源码

4)下面展示开发过程中的部分代码

具体业务代码

/**
     * 选择需要上传的最新备份
     * @param uploadDir
     * @return
     */
    public static File selectFileToUpload(Path uploadDir){
        // 获取要选择的文件夹
        Map<File,Long> map = new HashMap<>();
        try {
            // 获取文件明细
            Stream<Path> fileList = Files.list(uploadDir);
            List<String> collect = fileList.map(file -> {
                String s = null;
                if (Files.isDirectory(file)) {
                    selectFileToUpload(file);
                } else {
                    File realFile = file.normalize().toFile();
                    String name = realFile.getName();
                    String path = realFile.getPath();
                    long l = realFile.lastModified();
                    map.put(realFile,l);
                    log.info("文件名称:{},绝对路径 {},创建时间{}",name,path,l);
                }
                return s;
            }).collect(Collectors.toList());
            //给map中的value  倒序排序
            Stream<Map.Entry<File, Long>> sorted = map.entrySet().stream()
                    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()));

            File result = sorted.findFirst().get().getKey();
            return result;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

5)在下篇文章中具体解释文件在客户端和服务端中的传输。

有不足的地方 请多多指教!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工作这么多年,学会了内卷

共同加油,继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值