Java のクラス Runtime を使用して、sftp サーバーからファイルをダウンロードしたいと考えています。-B オプションを使用してバッファ サイズを増やす必要があるため、Jsch や SSHJ などのライブラリを使用できません。これまでにこのコードを試しました:
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();
}
}
次のエラー メッセージが表示されます。「xxxxxx に接続しています...」の代わりにホスト名が表示されます。
コマンドをパテで直接試してみましたが、うまく機能しますが、Javaで使用するとまったく機能しません。また、sftp の代わりにダウンロードするために runtime.exec() を使用して scp コマンドを試しましたが、それは機能します。
なぜそれが機能しないのか、誰かが手がかりを持っていますか? この方法では例が見つかりません。または、誰かが -B オプションを設定できる sftp 転送用のライブラリを知っていますか? Jsch と Sshj のメソッドを見逃している可能性があります。
前もって感謝します