Вы можете видеть, что библиотека FTPClient имеет класс FTPFileFiltersclass, который дает возможность фильтрации DIRECTORIES, NON_NULL и ALL
public class FTPFileFilters {
/**
* Accepts all FTPFile entries, including null.
*/
public static final FTPFileFilter ALL = new FTPFileFilter() {
@Override
public boolean accept(FTPFile file) {
return true;
}
};
/**
* Accepts all non-null FTPFile entries.
*/
public static final FTPFileFilter NON_NULL = new FTPFileFilter() {
@Override
public boolean accept(FTPFile file) {
return file != null;
}
};
/**
* Accepts all (non-null) FTPFile directory entries.
*/
public static final FTPFileFilter DIRECTORIES = new FTPFileFilter() {
@Override
public boolean accept(FTPFile file) {
return file != null && file.isDirectory();
}
};
}
Проблема в том, что я пытаюсь загрузить список файлов и ТОГДА каталогов, чтобы обрабатывать их по-разному:
Из моего подключения. Java:
// Download FTPFile[] of files and FTPFile[] of directories
// and give them to FileData for parsing and storage
public void downloadDirectory(String directory) {
try {
client.setFileType(FTP.BINARY_FILE_TYPE);
// Copy the files into the FileData list. If directory null, its assumed to be ftp user root Todo really?
FileData.getInstance().loadDirectoryContents(
client.listFiles(directory /*, !FTPFileFilters.DIRECTORIES Todo doesnt work*/),
client.listDirectories());
} catch (IOException e) {// Handle Todo
}
}
Из моего FileData.java:
public void loadDirectoryContents(FTPFile[] ftpFiles, FTPFile[] ftpDirectories){
removeAllFiles(); // Clear remoteFiles list
// Get
for(int i =0; i< ftpFiles.length; i++){
addRemoteFile(new RemoteFile(
ftpFiles[i].getName(),
ftpFiles[i].getLink(),
DateTimeManagement.toLocalDateTime(ftpFiles[i].getTimestamp()),
null,
false));
}
for(int i =0; i< ftpDirectories.length; i++){
addRemoteFile(new RemoteFile(
"./" + ftpDirectories[i].getName(),
ftpDirectories[i].getLink(),
DateTimeManagement.toLocalDateTime(ftpDirectories[i].getTimestamp()),
null,
true));
}
}
В конце я получаю список, включающий файлы и каталоги, а также каталоги снова.
Я не понимаю, почему FTPClient предоставляет метод listDirectories ... и фильтр, который позволяет ... получать только каталоги. Это избыточно, и нет возможности получить только файлы. Итак, вопрос в том, в чем секрет получения только файлов?