Отредактировано после уточнения вопроса.
Вам нужно ChannelSftp
и использовать один (или более) из его put
методов. Нет проблем в том, чтобы вызывать их более одного раза, даже одновременно (хотя это не увеличивает пропускную способность, это может помочь для высокой задержки. (См. Пример с ответом Джона).
Затем откройте ChannelExec
, чтобы выполнить ваши сценарии. Обычно вы можете дать несколько команд (разделенных ;
или символами новой строки) каналу, он передаст их оболочке, которая выполнит их последовательно. В качестве альтернативы здесь можно использовать несколько каналов (один за другим или одновременно).
После завершения последней команды вы снова используете ChannelSftp
для загрузки файла (используйте метод get
здесь).
Это на самом деле не относится к Eclipse, за исключением того, как включить библиотеку в путь сборки и запуска (если это так, указать в комментарии).
Альтернативой, если вам на самом деле не нужны скрипты в качестве файлов на сервере, будет использование варианта команды perl
, которая позволяет передавать скрипт либо в командной строке (т. Е. В каналах exec). строка команды) или в качестве стандартного ввода (т. е. во входном потоке канала exec). Подробности смотрите в документации perlrun .
Вы можете адаптировать свои сценарии, чтобы результат не записывался в файл, а создавался как вывод (который затем можно прочитать из вывода каналов exec).
Я добавил пример в свою версию коллекции примеров JSch.
Здесь важные части:
InputStream scriptStream =
new BufferedInputStream(new FileInputStream(arg[0]));
String command = "perl -w - ";
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
// input = script
channel.setInputStream(scriptStream);
// TODO: set other streams
channel.connect();
Хорошо, давайте посмотрим на ошибки.
Во-первых, у вас есть ошибки в вашем Perl-скрипте. Это выглядит как неправильный синтаксис в строке 27. Посмотрите на эту строку, и если вы не нашли проблему, задайте новый вопрос об этом.
(Сначала следует попытаться запустить это с простым SSH-соединением, без JSch, чтобы изолировать проблемы. Или, лучше, сначала попытаться запустить его локально на вашем компьютере.)
Во-вторых, ваше FileNotFoundException (кстати, вы должны были использовать e.printStackTrace()
вместо System.out.println(e);
в блоке chatch).
Это Accès refusé
означает, что ваша программа не имеет права писать здесь. Из других ваших путей, это не имя файла, а имя каталога. Вы не можете перезаписать каталог файлом. Используйте имя, под которым ваш файл должен быть сохранен:
File file4 = new File("C:\\Users\\Computer\\workspace\\proj\\anime.txt");