java8 - выбрать последний измененный файл, используя сопоставление с образцом ChannelSftp - PullRequest
0 голосов
/ 11 сентября 2018

Как я знаю, ChannelSftp.ls принимает в качестве аргумента Directory и перечисляет список векторов, наше требование к проекту - найти последний измененный файл из сопоставленного шаблона глобуса и переместить его в другой каталог, мы можем достичьЭто string.contains() подход также, каков простой способ сделать это в Java-8, JSCH 0.1.51.Ниже приведен код, который я пытаюсь исправить, чтобы заставить его работать

Список каталогов файлов выглядит так:

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

Код:

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
    }
}

1 Ответ

0 голосов
/ 11 сентября 2018

Здесь Java-8 вам не сильно поможет.Номер даты легко узнаваем с помощью Regex :

\w+_\w+_(\d+)\.\w{2,4}

Просто примечание, которое, я полагаю, на xxxx и lastbird всегда равно 1..n буквам, разделенным на _разделитель и затем с другим.Затем приходит числовая часть, представляющая дату.Наконец, расширение файла, включающее 2-4 буквы.

Используйте это преимущество, чтобы получить дату (например, 20170609).Они могут быть проанализированы на целые числа, и поскольку этот формат позволяет прямое сравнение целых чисел, получите наибольшее число.

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);    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...