SFTPClient已经写好,要怎么只取出文件名中包含日期的文件(日期偏移量:1),求助
Date date=new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE,-1);//-1是昨天,1是明天
date=calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
String dateString = formatter.format(date); //这个可以得到昨天的日期,比如20171108
然后判断你的文件名
不知道你说的偏移量是什么意思,是指日期是文件名的开头么?
Vector v = channelSftp.ls(ftpFilePath);//遍历文件夹中的文件
Iterator it = v.iterator();
while (it.hasNext()){
LsEntry entry = (LsEntry) it.next();
SftpATTRS attrs = entry.getAttrs();
String fileName = entry.getFilename();//取出文件名称
//根据你实际文件中文件名称所包含的日期格式,判断该文件名称是否包含日期,
//如果包含,则使用channelSftp.get("SFTP服务器上文件的绝对路径", "要下载到本地的绝对路径"); 下载即可
}
1.如果文件名中日期的偏移量固定,就先截取,然后用typeof判定是否是日期格式数据
2.如果偏移量不固定,可以考虑下泛型继承日期类
如果是考虑到偏移量为1,那就是说假如你要下载今天2017-11-09对应的文件,那你就下载文件名包含2017-11-08、2017-11-09,2017-11-10这几天的文件,这一步可以在程序处理,那就从sftp服务器获取这几天的文件,下载就可以了。
如果你的文件名有规律,那就更容易了
注意:必须要使用JDK 1.8.
参考.
// 获取
// LocalDate 只包含2010-10-10 这样的数据.
LocalDate ld = LocalDate.now();// 获取当前日期.
LocalDate nextDate = ld.plusDays(1); // 明天.
LocalDate prevDate = ld.minusDays(1); // 昨天.
System.out.println("今天(格式化的字符串,可以自己填):"+ld.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println("明天(格式化的字符串,可以自己填):"+nextDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println("昨天(格式化的字符串,可以自己填):"+prevDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
// ----------END
/*
* 匹配.(这个可以使用JDK1.7或者JDK1.6,但我是基于JDK1.8写的)
*/
// 下面这个正则表达式可以匹配:2010-1-1,或者2010-10-1或者2010-10-10这种的.
Pattern pattern = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}");
Matcher matcher = pattern.matcher("要匹配的字符串");
if(matcher.find()) {
// 有匹配.
}