使用java sftp: jsch

本文介绍如何使用JSch库实现SFTP文件传输功能。JSch是一个纯Java的SSH2库,支持SFTP、SSH及SSH2等功能。文中通过示例代码详细展示了如何从远程服务器下载指定目录下的所有文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值