首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java8 -使用ChannelSftp模式匹配拾取上次修改的文件

java8 -使用ChannelSftp模式匹配拾取上次修改的文件
EN

Stack Overflow用户
提问于 2018-09-12 03:13:37
回答 1查看 740关注 0票数 0

因为我知道ChannelSftp.lsDirectory作为参数,它列出了向量的列表,我们的项目需求是从匹配的glob模式中找出最后修改的文件并将其移动到另一个目录,我们也可以实现string.contains()该方法,在Java-8JSCH 0.1.51中做这件事的简单方法是什么。下面是我正在尝试的代码,如何修复它以使其正常工作

文件的目录列表如下:

  • xx_lastbird_20180909.txt
  • xABBS_xxx_firstbird_20170609.txt
  • xxxx_firstbird_20170609.txt
  • xxxxx_firstbird_20150909.txt

代码:

代码语言:javascript
复制
Vector ls = channelSftp.ls(path);
Pattern pattern = Pattern.compile("*_[lastbird,firstbird]_[0-9]{8}.txt");

for (Object entry : ls) {
    ChannelSftp.LsEntry e = (ChannelSftp.LsEntry) entry;
    //match regex on e.getFilename()
    Matcher m = pattern.matcher(e.getFilename());
    if (m.matches()) {
        // last modified file object from matched file names
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-09-12 03:28:36

在这里,Java-8不会对您有多大帮助。使用Regex可以很容易地识别日期

代码语言:javascript
复制
\w+_\w+_(\d+)\.\w{2,4}

需要注意的是,我想在xxxxlastbird上,总是用_分隔符分隔1..n个字母,后面跟着另一个字母。然后出现表示日期的数字部分。最后是一个包含2-4个字母的文件扩展名。

利用这一优势获取日期(例如20170609)。这些可以被解析为整数,由于这种格式允许直接进行整数比较,因此可以获得最大的数字。

代码语言:javascript
复制
Pattern pattern = Pattern.compile("\\w+_\\w+_(\\d+)\\.\\w{2,4}");
Matcher matcher;

int maxIndex = 0;
int maxDate = 0;

for (int i=0; i<ls.size(); i++) {
    String filename = ((ChannelSftp.LsEntry) entry).getFilename();
    matcher = pattern.matcher(filename);
    if (matcher.find(1)) {
        int date = Integer.parseInt(matcher.group(1));
        if (date >= maxDate) {
            date = maxDate;
            maxIndex = i;
        }
    }
}

System.out.println("Last modified file is found on index: " + maxIndex);
ChannelSftp.LsEntry = (ChannelSftp.LsEntry) vector.get(maxIndex);    
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52282761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档