使用java sftp: jsch

使用java sftp: jsch
因為資安的關係,原本的 FTP 要改成 SFTP,本來想用 delphi 寫的,但是偏偏只有 EldoS Corporation 這家公司
 的 SFTPBlackbox  元件有提供 sftp 的元件,而且是要付費的,殘念...
,轉向 java 搜尋,找到了 jsch (網站 http://www.jcraft.com/jsch/ )這個純 java 的 sftp 函式庫。
 
JSch 介紹 :
1.該函式庫需使用 Java Cryptography Extension (JCE) ,可以到 sun 的網站自行下載( http://java.sun.com/products/jce/)
sun JDK 1.4.2 以上版本已內含 JCE,所以建議你的 jdk 最好是  1.4.2 以上版本 ^^
2.若還有需要用到資料傳送後壓縮功能,那你還必需 JZlib 可以到以下網站下載(  http://www.jcraft.com/jzlib/)
 
JSch 提使 sftp,ssh,ssh2 ,算是相當的完整,在 example 目錄下有一些範例可供參考。以下是使用 sftp 的範例: ,將 server 上 /mydata 目錄下的
檔案(不包含目錄)全部下載到 c:/temp 目錄下 
 
try{
      String ini_local_path,ini_local_path = "c://temp";          //下載到本機 c:/temp 目錄
      String ini_server_path = "/mydata";                               // 從伺服器 /mydata 目錄開始下載
      String userid = "userid";                                                  //帳號
      String passwd = "passwd";
      String sftp_ip = "127.0.0.1";                                         // ip
      int port = 22;                                                                 // port
      JSch jsch=new JSch();
       Session session =jsch.getSession(usrid,sftp_ip,port);
      session.setPassword(passwd);
      java.util.Properties config=new java.util.Properties();
      config.put("StrictHostKeyChecking", "no");                     //不驗証 HostKey
      session.setConfig(config);
      session.connect();
       Channel channel=session.openChannel("sftp");
       channel.connect();
       ChannelSftp c=(ChannelSftp)channel;
       c.cd(ini_server_path);
       Vector vt = c.ls(ini_server_path);
            if (vt!=null){
                for(int i=0;i<vt.size();i++){
                    Object obj=vt.elementAt(i);
                        if(obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry){
                                   SftpATTRS arr = ((com.jcraft.jsch.ChannelSftp.LsEntry)obj).getAttrs();
                                     String fileName = ((com.jcraft.jsch.ChannelSftp.LsEntry )obj).getFilename();
                                      if (!fileName.equals("..") && !fileName.equals(".")) {    //檔案名稱 . 和 .. 不做處理
                                         if (!arr.isDir()){             //不是目錄才處理
                                            c.get(ini_server_path + "/" + fileName ,ini_local_path + File.separator+ fileName );
                                        }
                                    }
                                    arr = null;
                        }
                        obj = null;
                }
            }
            c.quit();
            c.exit();
            session.disconnect();
}catch(Exception e){
            e.printStackTrace();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值