【发布时间】:2012-09-05 10:16:24
【问题描述】:
“如何使用 Jsch 复制文件?”是第一个问题。由于使用 Jsch 复杂且容易出错,而且工作级别非常低,因此您需要编写几行代码才能让一个简单的 scp 工作。
那么,如何在 Java 中用尽可能少的代码行来实现一个 scp(甚至是 sftp)而不违反 DRY 原则?
【问题讨论】:
“如何使用 Jsch 复制文件?”是第一个问题。由于使用 Jsch 复杂且容易出错,而且工作级别非常低,因此您需要编写几行代码才能让一个简单的 scp 工作。
那么,如何在 Java 中用尽可能少的代码行来实现一个 scp(甚至是 sftp)而不违反 DRY 原则?
【问题讨论】:
您可以使用 Ant scp 任务使用的库:
package org.example.scp;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.optional.ssh.Scp;
public class ScpCopyExample {
public void downloadFile( String remoteFilePath, String localFilePath ) {
Scp scp = new Scp();
scp.setFile("username:password@host.example.org:" + remoteFilePath);
scp.setLocalTofile(localFilePath);
scp.setProject(new Project()); // prevent a NPE (Ant works with projects)
scp.setTrust(true); // workaround for not supplying known hosts file
scp.execute();
}
public static void main(String[] args) {
ScpCopyExample scpDemo = new ScpCopyExample();
scpDemo.downloadFile("~/test.txt", "testlocal.txt");
}
}
我在类路径中使用了以下 jars:
此示例可以轻松扩展为上传文件或使用 SFTP。
【讨论】:
尽可能少的行?试试这个利用 ANT scp task 的 groovy 示例。
@Grapes([
@Grab(group='org.apache.ant', module='ant-jsch', version='1.8.4'),
@GrabConfig(systemClassLoader=true)
])
def ant = new AntBuilder()
ant.scp(file:"helloworld.doc", todir:"mark@remotehost:/home/mark/docs", password:"sEcReT")
Grape annotations 将在运行时下载 jar 依赖项。
【讨论】:
GroovyScp scp = new GroovyScp(); scp.download(...); 我想插入到我的 Java 代码中。