java – 排序包含数字字符串的文件名数组
发布时间:2020-05-25 14:39:17 所属栏目:Java 来源:互联网
导读:对于我的项目,我需要从FTP服务器下载一个zip文件,每年可以发布一个新的zip约13次.我需要按照服务器的命名约定下载最新的文件: 前缀版本号(一位或两位数字)年份(两位数)后缀“.zip” 例如: ALFP1016F.zip 前缀将始终是相同的(ALFP),后缀为F或P(代表“full”
|
对于我的项目,我需要从FTP服务器下载一个zip文件,每年可以发布一个新的zip约13次.我需要按照服务器的命名约定下载最新的文件:
例如: 前缀将始终是相同的(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 我的预期产出是 . 这是我迄今为止做的: //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;
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
