После того, как я выкопал соответствующие части кода соуса, я вполне уверен, что ответ - "нет".
Все методы put()
, которые принимают одно или несколько имен файлов в качестве параметров, в конечном итоге вызывают частный метод sendFiles()
для фактической отправки файлов. Этот метод создает объект File
из каждого имени файла, а затем объект FileInputStream
из каждого файла. И, конечно же, конструктор FileInputStream
выдает FileNotFoundException
"если файл не существует, является каталогом, а не обычным файлом , или по какой-то другой причине не может быть открыт для чтения". (И, видимо, не всегда выдает его с правильным сообщением об ошибке.)
РЕДАКТИРОВАТЬ : Хотя, честно говоря, совсем нетрудно создать собственную рекурсивную функцию, которая копирует каталог:
private static void putDir(Connection conn, String localDirectory, String remoteTargetDirectory, String mode) throws IOException {
final String[] fileList = curDir.list();
for (String file : fileList) {
final String fullFileName = localDirectory + "/" + file;
if (new File(fullFileName).isDirectory()) {
final String subDir = remoteTargetDirectory + "/" + file;
Session sess = conn.openSession();
sess.execCommand("mkdir " + subDir);
sess.waitForCondition(ChannelCondition.EOF, 0);
putDir(conn, fullFileName, subDir, mode);
}
else {
SCPClient scpc = conn.createSCPClient();
scpc.put(fullFileName, remoteTargetDirectory, mode);
}
}
}