微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 排序包含数字字符串的文件名数组

对于我的项目,我需要从FTP服务器下载一个zip文件,每年可以发布一个新的zip约13次.我需要按照服务器的命名约定下载最新的文件
前缀版本号(一位或两位数字)年份(两位数)后缀“.zip”

例如:
ALFP1016F.zip

前缀将始终是相同的(ALFP),后缀为F或P(代表“full”或“partial”;我只需要以后缀F结尾的文件).此外,目录中还有其他几个文件需要忽略,因为它们具有不同的前缀.然后,我需要按照这个优先顺序获取数组中最新的文件

>最近一年.当然’99不应该被视为最近一年.
>最新版本号

例如,如果我有这个文件名列表(full server directory):

1stpage712.pdf
1stpage914.pdf
ALFP1015F.zip
ALFP1015P.zip
ALFP716F.zip
ALFP716P.zip
FSFP816F.zip
FSFP816P.zip

我的预期产出是
ALFP716F.zip,因为16是最近一年,7是最近一年的版本号

.

这是我迄今为止做的:

//necessary imports
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

//initialize FTP client
ftpClient = new FTPClient();

try {
    //connect to server
    ftpClient.connect(server,port);
    ftpClient.login(username,password);
    ftpClient.enterLocalPassiveMode();
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

    //list all names from server
    String[]filenames = ftpClient.listNames();

    //return expected file name
    String expectedFileName = returnMostRecent(filenames);
} catch (Exception e) { 
    e.printstacktrace(); 
} finally {
    try {
        if (ftpClient.isConnected()) {
            ftpClient.logout();
            ftpClient.disconnect();
            System.out.println("disconnected from server");
        }
    } catch (IOException ex) { ex.printstacktrace(); }
}

写了returnMostRecent(String [])方法,我做了一个悲惨的尝试,但最后却出现了一个难以置信的乱码,不值得贴在这里.

我如何排序这个数组,并按照我的优先顺序有效地返回最近的文件

解决方法

我没有测试过,但我认为它应该工作.
private String returnMostRecent(String[] fileNames) {
   String file = null;
   double version = -1;
   for(String name : listNames)
   {
      // skip files that don't match
      if (!name.matches("ALFP[0-9]*F.zip"))
          continue;
      // get digits only
      String digits = name.replaceAll("\\D+","");
      // format digits to <year>.<version>
      String vstr = digits.substring(digits.length-2,digits.length()) + ".";
      if (digits.length() < 4)
         vstr += "0";
      vstr = digits.substring(0,digits.length()-2);
      double v = Double.parseDouble(vstr);
      if (v > version)
      {
          version = v;
          file = name;
      }
   }

   return file;
}

原文地址:https://www.jb51.cc/java/126755.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐