Для моего проекта мне нужно загрузить zip файл с FTP-сервера, который выпускает новый zip примерно 13 раз в год. Мне нужно загрузить последний файл в соответствии с соглашением об именах серверов: Prefix + release number (one or two digits) + year (two digits) + suffix + ".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[])
, но в итоге оказался непонятным беспорядок, который не стоит публиковать здесь.
Как я могу отсортировать этот массив и эффективно вернуть последний файл после моего приоритетного порядка?