Я хотел бы загрузить файл с sftp-сервера, используя класс Runtime Java. Я не могу использовать такие библиотеки, как Jsch или SSHJ, потому что мне нужно использовать параметр -B для увеличения размера буфера. Я пробовал с этим кодом до сих пор:
public void download(String source, String destination,String port, String user, String host ){
Runtime runtime = Runtime.getRuntime();
String cmd = "sftp -oPort=" + port + " -B 150000 "+ user + "@" + host + ":" + source + " " + destination;
String[] args = { "/bin/sh", "-c", cmd };
try {
long startTime = System.currentTimeMillis();
log.info("cmd: "+ cmd);
final Process process = runtime.exec(args);
process.waitFor();
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println("Time: "+elapsedTime);
BufferedReader bre = new BufferedReader(new InputStreamReader(process.getErrorStream()));
StringBuffer sbe = new StringBuffer();
String lineError;
while ((lineError = bre.readLine()) != null) {
sbe.append(lineError).append("\n");
}
String answerError = sbe.toString();
if(answerError.length()>0)log.error("Error:"+answerError);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Я получаю сообщение об ошибке: Подключение к xxxxxxx... с именем хоста вместо «xxxxxx».
Я попробовал команду непосредственно в шпаклевке, и она отлично работает, но когда я использую ее в java, она вообще не работает. Я также пробовал использовать команду scp с runtime.exec() для загрузки вместо sftp, и это сработало.
Кто-нибудь знает, почему он не работает? Я не могу найти пример с этим методом. Или кто-нибудь знает библиотеку для передачи по sftp, которая позволяет установить опцию -B? я, возможно, пропустил метод в Jsch и Sshj.
заранее спасибо