gpt4 book ai didi

java8 - 使用 ChannelSftp 模式匹配选择最后修改的文件

转载 作者:行者123 更新时间:2023-12-02 10:49:26 25 4
gpt4 key购买 nike

据我所知,ChannelSftp.lsDirectory 作为参数,它列出了 vector 列表,我们的项目要求是从匹配的文件中找出最后修改的文件glob 模式并将其移动到另一个目录,我们也可以实现 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
}
}

最佳答案

这里 Java-8 不会对你有太大帮助。日期数字很容易识别 Regex :

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

请注意,我认为 xxxxlastbird 始终是 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);

关于java8 - 使用 ChannelSftp 模式匹配选择最后修改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com