Если ваш код зависает, это означает, что ваш FTP-сервер не отправил весь файл. Вы можете использовать Таймер, но я считаю, что FtpClient позволяет вам установить тайм-аут.
Кстати: способ чтения файла очень неэффективен. Если ваш файл больше, чем несколько K, он будет использовать все больше процессорных ресурсов.
Вы создаете Символ из байта (что само по себе является плохой идеей) и объекта String для каждого байта в файле.
Я предлагаю использовать предоставленный метод копирования или тот, который поставляется с библиотекой commons-io, для копирования данных в ByteArrayInputStream.