使用Jsch实现scp并且不再重新发明轮子

Sim*_*rer 3 java ant scp

"如何使用Jsch复制文件?" 问题是第一个到位的.由于使用Jsch很复杂且容易出错并且工作水平很低,因此您需要编写多行来编写简单的scp工作.

那么,如何在Java中使用尽可能少的代码行实现scp(甚至是sftp)并且不违反DRY原则?

Sim*_*rer 5

您可以使用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");
    }

}
Run Code Online (Sandbox Code Playgroud)

我在我的类路径中使用以下jar执行此操作:

  • jsch-0.1.48.jar
  • 蚂蚁jsch-1.6.5.jar
  • ANT-1.7.0.jar
  • 蚂蚁发射-1.7.0.jar

此示例可以轻松扩展为上载文件或使用SFTP.