JSch 介紹 :
sun JDK 1.4.2 以上版本已內含 JCE,所以建議你的 jdk 最好是 1.4.2 以上版本 ^^
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();
}