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

前端之家收集整理的这篇文章主要介绍了java – 排序包含数字字符串的文件名数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于我的项目,我需要从FTP服务器下载一个zip文件,每年可以发布一个新的zip约13次.我需要按照服务器的命名约定下载最新的文件
前缀版本号(一位或两位数字)年份(两位数)后缀“.zip”

例如:
ALFP1016F.zip

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

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

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

  1. 1stpage712.pdf
  2. 1stpage914.pdf
  3. ALFP1015F.zip
  4. ALFP1015P.zip
  5. ALFP716F.zip
  6. ALFP716P.zip
  7. FSFP816F.zip
  8. FSFP816P.zip

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

.

这是我迄今为止做的:

  1. //necessary imports
  2. import org.apache.commons.net.ftp.FTP;
  3. import org.apache.commons.net.ftp.FTPClient;
  4. import org.apache.commons.net.ftp.FTPFile;
  5.  
  6. //initialize FTP client
  7. ftpClient = new FTPClient();
  8.  
  9. try {
  10. //connect to server
  11. ftpClient.connect(server,port);
  12. ftpClient.login(username,password);
  13. ftpClient.enterLocalPassiveMode();
  14. ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
  15.  
  16. //list all names from server
  17. String[]filenames = ftpClient.listNames();
  18.  
  19. //return expected file name
  20. String expectedFileName = returnMostRecent(filenames);
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. } finally {
  24. try {
  25. if (ftpClient.isConnected()) {
  26. ftpClient.logout();
  27. ftpClient.disconnect();
  28. System.out.println("Disconnected from server");
  29. }
  30. } catch (IOException ex) { ex.printStackTrace(); }
  31. }

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

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

解决方法

我没有测试过,但我认为它应该工作.
  1. private String returnMostRecent(String[] fileNames) {
  2. String file = null;
  3. double version = -1;
  4. for(String name : listNames)
  5. {
  6. // skip files that don't match
  7. if (!name.matches("ALFP[0-9]*F.zip"))
  8. continue;
  9. // get digits only
  10. String digits = name.replaceAll("\\D+","");
  11. // format digits to <year>.<version>
  12. String vstr = digits.substring(digits.length-2,digits.length()) + ".";
  13. if (digits.length() < 4)
  14. vstr += "0";
  15. vstr = digits.substring(0,digits.length()-2);
  16. double v = Double.parseDouble(vstr);
  17. if (v > version)
  18. {
  19. version = v;
  20. file = name;
  21. }
  22. }
  23.  
  24. return file;
  25. }

猜你在找的Java相关文章