Java操作sftp.docx
- 文档编号:10188550
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:23
- 大小:22.15KB
Java操作sftp.docx
《Java操作sftp.docx》由会员分享,可在线阅读,更多相关《Java操作sftp.docx(23页珍藏版)》请在冰豆网上搜索。
Java操作sftp
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import mon.util.log.EventLog;
/**
* In order for SSH2 tunneling to function correctly one must ensure that the
* following line is uncommented in /etc/ssh/sshd_config :
* --------------------------CUT-------------------------------
* # Change to yes to enable tunnelled clear text passwords
* PasswordAuthentication yes
* --------------------------CUT-------------------------------
* Otherwise the initiation of the tunnel will fail with
* "SSH Initialization failed, try again?
* com.jcraft.jsch.JSchException:
Auth fail"
* @author aimer.xu
*
*/
public class SftpHelper extends Thread {
private static EventLog log = new EventLog(SftpHelper.class);
private String host;
private String username;
private String password;
private String location;
private int port;
private String knowHosts;
private String osName;
private List
public SftpHelper(String host, String username, String password, int port) {
this(host, username, password, port, "");
}
public SftpHelper(String host, String username, String password, int port, String location) {
this.host = host;
this.username = username;
this.password = password;
this.port = port;
osName = System.getProperty("os.name");
if (osName.toUpperCase().indexOf("WINDOWS") > -1) {
this.knowHosts = "c:
\\known_hosts";
if(location == null || location.length() == 0){
this.location = "c:
\\";
}
} else {
this.knowHosts = "/root/.ssh/known_hosts";
if(location == null || location.length() == 0){
this.location = "/";
}
}
this.location = location;
}
public void addFilename(String filename){
filenames.add(filename);
}
public void setFilenames(List
this.filenames = filenames;
}
public void run(){
upload();
}
/**
* 要上传的文件必须包含完整的路径
*
*/
public boolean upload(){
if(filenames.size() == 0)
return false;
Session session;
Channel channel;
JSch jsch = new JSch();
try {
jsch.setKnownHosts(knowHosts);
session = jsch.getSession(username, host, port);
session.setPassword(password);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp c = (ChannelSftp)channel;
c.cd(location);
InputStream in = null;
OutputStream out = null;
for(int i=0; i String filename = filenames.get(i); if(filename == null || "".equals(filename)){ log.Debug("", "当前没有要上传的文件! "); continue; } int idx= filename.lastIndexOf(File.separator); String uploadname = filename.substring(idx==-1? 0: idx+1); out = c.put(uploadname); log.Debug("", "sleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep "+5000+"ms! "); sleep(5000); in = new FileInputStream(filename); // String suffix = filename.substring(filename.lastIndexOf(".")+1); // if("gz".equals(suffix)){ // in = new GZIPInputStream(in); // } byte [] b = new byte[1024]; int n; while ((n = in.read(b)) ! = -1) { out.write(b); } } out.flush(); out.close(); in.close(); c.disconnect(); session.disconnect(); sleep(500); return true; } catch (JSchException e) { e.printStackTrace(); } catch (SftpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch(InterruptedException e){ e.printStackTrace(); } return false; } public static void main(String[] args){ String username = "root"; String host = "*.*.*.*"; int port = 22; String password = "******"; String path = "/home/data/download/"; SftpHelper helper = new SftpHelper(host, username,password, port,path); helper.addFilename("c: \\bcp.sql"); helper.addFilename("c: \\a.sql"); // helper.upload("c: \\bcp.sql"); helper.start(); } } importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; importjava.util.ArrayList; importjava.util.List; importjava.util.Vector; importcom.jcraft.jsch.Channel; importcom.jcraft.jsch.ChannelSftp; importcom.jcraft.jsch.JSch; importcom.jcraft.jsch.JSchException; importcom.jcraft.jsch.Session; importcom.jcraft.jsch.SftpException; importmon.util.log.EventLog; /** *InorderforSSH2tunnelingtofunctioncorrectlyonemustensurethatthe *followinglineisuncommentedin/etc/ssh/sshd_config: *--------------------------CUT------------------------------- *#Changetoyestoenabletunnelledcleartextpasswords *PasswordAuthenticationyes *--------------------------CUT------------------------------- *Otherwisetheinitiationofthetunnelwillfailwith *"SSHInitializationfailed,tryagain? *com.jcraft.jsch.JSchException: Authfail" *@authoraimer.xu * */ publicclassSftpHelperextendsThread{ privatestaticEventLoglog=newEventLog(SftpHelper.class); privateStringhost; privateStringusername; privateStringpassword; privateStringlocation; privateintport; privateStringknowHosts; privateStringosName; privateList publicSftpHelper(Stringhost,Stringusername,Stringpassword,intport){ this(host,username,password,port,""); } publicSftpHelper(Stringhost,Stringusername,Stringpassword,intport,Stringlocation){ this.host=host; this.username=username; this.password=password; this.port=port; osName=System.getProperty("os.name"); if(osName.toUpperCase().indexOf("WINDOWS")>-1){ this.knowHosts="c: \\known_hosts"; if(location==null||location.length()==0){ this.location="c: \\"; } }else{ this.knowHosts="/root/.ssh/known_hosts"; if(location==null||location.length()==0){ this.location="/"; } } this.location=location; } publicvoidaddFilename(Stringfilename){ filenames.add(filename); } publicvoidsetFilenames(List this.filenames=filenames; } publicvoidrun(){ upload(); } /** *要上传的文件必须包含完整的路径 * */ publicbooleanupload(){ if(filenames.size()==0) returnfalse; Sessionsession; Channelchannel; JSchjsch=newJSch(); try{ jsch.setKnownHosts(knowHosts); session=jsch.getSession(username,host,port); session.setPassword(password); session.connect(); channel=session.openChannel("sftp"); channel.connect(); ChannelSftpc=(ChannelSftp)channel; c.cd(location); InputStreamin=null; OutputStreamout=null; for(inti=0;i Stringfilename=filenames.get(i); if(filename==null||"".equals(filename)){ log.Debug("","当前没有要上传的文件! "); continue; } intidx=filename.lastIndexOf(File.separator); Stringuploadname=filename.substring(idx==-1? 0: idx+1); out=c.put(uploadname); log.Debug("","sleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep"+5000+"ms! "); sleep(5000); in=newFileInputStream(filename); //Stringsuffix=filename.substring(filename.lastIndexOf(".")+1); //if("gz".equals(suffix)){ //in=newGZIPInputStream(in); //} byte[]b=newbyte[1024]; intn; while((n=in.read(b))! =-1){ out.write(b); } } out.flush(); out.close(); in.close(); c.disconnect(); session.disconnect(); sleep(500); returntrue; }catch(JSchExceptione){ e.printStackTrace(); }catch(SftpExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }catch(InterruptedExceptione){ e.printStackTrace(); } returnfalse; } publicstaticvoidmain(String[]args){ Stringusername="root"; Stringhost="*.*.*.*"; intport=22; Stringpassword="******"; Stringpath="/home/data/download/"; SftpHelperhelper=newSftpHelper(host,username,password,port,path); helper.addFilename("c: \\bcp.sql");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 操作 sftp