只要涉及到网络通信,选择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)在下篇文章中具体解释文件在客户端和服务端中的传输。
有不足的地方 请多多指教!!!