【发布时间】:2016-07-02 15:02:18
【问题描述】:
对于我的项目,我需要从 FTP 服务器下载一个 zip 文件,该服务器每年大约发布 13 次新的 zip。我需要按照服务器的命名约定下载最新的文件:Prefix + release number (one or two digits) + year (two digits) + suffix + ".zip"
例如:
ALFP1016F.zip
前缀将始终相同 (ALFP),后缀为 F 或 P(代表“完整”或“部分”;我只需要以后缀 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[]) 方法时做了一次悲惨的尝试,但结果却是一团糟,不值得在这里发布。
如何对这个数组进行排序并按照我的优先顺序有效地返回最近的文件?
【问题讨论】:
-
您可以使用Regular Expressions with Capturing Groups 隔离文件名的重要部分,然后使用它们来查找最新版本(无需实际排序)。如果这太复杂了,那么使用多个
substring()来做同样的事情。
标签: java android arrays algorithm sorting