【发布时间】:2014-07-31 08:48:54
【问题描述】:
我想使用 Java 的 Runtime 类从 sftp 服务器下载文件。我不能使用 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”
我已经在 putty 中直接尝试过该命令,效果很好,但是当我在 java 中使用它时,它根本不起作用。我还尝试使用带有 runtime.exec() 的 scp 命令而不是 sftp 进行下载,并且可以正常工作。
有人知道为什么它不起作用吗?我找不到这种方法的例子。 或者有人知道允许设置 -B 选项的 sftp 传输库吗?我可能错过了 Jsch 和 Sshj 中的一个方法。
提前致谢
【问题讨论】:
-
不确定这是否会有所帮助,但您是否尝试过获取流程输出流并查看是否有更多信息?
-
Here 是您可以使用的库。 “当我在 java 中使用它时它根本不起作用”是什么意思?
标签: java sftp runtime.exec jsch sshj