3

「Jschを使用してファイルをコピーするにはどうすればよいですか?」最初の質問でした。Jschの使用は複雑でエラーが発生しやすく、非常に低レベルでも機能するため、単純なscpを機能させるには、いくつかの行をプログラムする必要があります。

では、 Javaで可能な限り少ないコード行でscp(またはsftp)を実装し、DRYの原則に違反しないようにするにはどうすればよいですか?

4

2 に答える 2

5

Antscpタスクで使用されるライブラリを使用できます。

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");
    }

}

私はクラスパスで次のjarファイルを使用してこれを行いました。

  • jsch-0.1.48.jar
  • ant-jsch-1.6.5.jar
  • ant-1.7.0.jar
  • ant-launcher-1.7.0.jar

この例は、ファイルをアップロードするか、代わりにSFTPを使用するように簡単に拡張できます。

于 2012-09-12T11:43:41.917 に答える
1

できるだけ少ない行?ANT scp taskを利用するこのグルーヴィーな例を試してください。

@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 アノテーションは、実行時に jar 依存関係をダウンロードします。

于 2012-09-12T20:46:36.153 に答える