JSch:純JAVA實現SFTP文件上傳和下載

jopen 11年前發布 | 89K 次閱讀 JSch Java開發

    如果你想用純JAVA實現SFTP文件上傳或下載,或者是想純JAVA連接到SSH2服務器上執行命令,那就使用JSch.jar包吧。這里我們先描述實現SFTP協議的上傳和下載,上代碼和詳細的代碼注釋:

/**

  • 利用JSch包實現SFTP下載、上傳文件
  • @param ip 主機IP
  • @param user 主機登陸用戶名
  • @param psw 主機登陸密碼
  • @param port 主機ssh2登陸端口,如果取默認值,傳-1 */ public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{ Session session = null; Channel channel = null;
JSch jsch = new JSch();


if(port <=0){
    //連接服務器,采用默認端口
    session = jsch.getSession(user, ip);
}else{
    //采用指定的端口連接服務器
    session = jsch.getSession(user, ip ,port);
}

//如果服務器連接不上,則拋出異常
if (session == null) {
    throw new Exception("session is null");
}

//設置登陸主機的密碼
session.setPassword(psw);//設置密碼   
//設置第一次登陸的時候提示,可選值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
//設置登陸超時時間   
session.connect(30000);

try {
    //創建sftp通信通道
    channel = (Channel) session.openChannel("sftp");
    channel.connect(1000);
    ChannelSftp sftp = (ChannelSftp) channel;


    //進入服務器指定的文件夾
    sftp.cd("domains");

    //列出服務器指定的文件列表
    Vector v = sftp.ls("*.txt");
    for(int i=0;i<v.size();i++){
        System.out.println(v.get(i));
    }

    //以下代碼實現從本地上傳一個文件到服務器,如果要實現下載,對換以下流就可以了
    OutputStream outstream = sftp.put("1.txt");
    InputStream instream = new FileInputStream(new File("c:/print.txt"));

    byte b[] = new byte[1024];
    int n;
    while ((n = instream.read(b)) != -1) {
        outstream.write(b, 0, n);
    }

    outstream.flush();
    outstream.close();
    instream.close();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    session.disconnect();
    channel.disconnect();
}

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!