Во-первых (не имеет отношения к вашей проблеме), вы не должны начинать новый сеанс и канал для каждого файла или каталога - откройте сеанс и канал один раз и повторно используйте его для всех загрузок файлов. Это будет намного быстрее, так как каждое открытие сеанса занимает несколько циклов и некоторые сложные криптографические вычисления. Открытие канала занимает еще одну поездку.
Затем посмотрите, как работает ChannelSftp.put (String) . Он принимает имя удаленного файла в качестве аргумента и возвращает OutputStream, в который вы затем можете записать свои данные. Вы не используете OutputStream, что означает, что загрузка на самом деле не произойдет.
Полагаю, вы хотите ChannelSftp.put (String, String) - это будет принимать имя локального и удаленного файла и загружать содержимое локального файла, создавая удаленный файл (или перезаписывая его, если он уже существует).
Кроме того, может быть проблема в том, что dir.toString () возвращает имя файла в локальном соглашении об именах (т. Е. Разделяется \
в системах Windows), в то время как имена необходимо разделять /
. Вы могли бы использовать простой .replace('\\', '/')
, я думаю.
Это не совсем объясняет ваши наблюдения - какой SSH-сервер вы используете, в какой системе?