Most exceptions used by ftp package are subclasses of FTPException and inherit its features:
exception code can be used to more precisely identify the problem. Exception codes are defined within each exception class (look at the source code). For example, in ClientException, code 8 (ClientException.BAD_MODE) indicates that client refused operation because of bad transfer mode, while code 13 (ClientException.BAD_TYPE) indicates that the same thing was caused by bad transfer type. To programmatically retrieve the exception code, use exception.getCode().
exception nesting can be used to track the root of the exceptions that come from lower software layers. Use getRootCause().