为了我的项目,我需要从FTP服务器下载一个zip文件,该服务器每年发布约13次新的zip文件。我需要按照服务器的命名约定下载最新的文件:
前缀 + 发布号(一到两位数字)+ 年份(两位数字)+ 后缀 + ".zip"
例如:
ALFP1016F.zip
前缀将始终相同(ALFP),后缀为F或P(表示“完整”或“部分”;我只需要以F结尾的文件)。此外,目录中还有其他几个文件需要忽略,因为它们具有不同的前缀。然后,我需要按照以下优先顺序获取数组中的最新文件:
- 最近的年份。当然,“99”不应视为最近的年份。
- 最新的发布号
例如,如果我有以下文件名列表(完整的服务器目录):
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[])
方法,但最终只得到了一堆难以理解的代码,不值得在这里发布。我应该如何对此数组进行排序,并有效地返回按照我的优先顺序排列的最近文件?
substring()
来完成相同的任务。 - PM 77-1