需要jar包:jsch-0.1.40.jar
port 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 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 com.jcraft.jsch.UserInfo;
/**
* sftp上传
* @author guankai
* @time 2009-7-24
* @email guankai@webgame.com.cn
*/
public class SftpHelper extends Thread {
private String host;
private String username;
private String password;
private String location;
private int port;
private String knowHosts;
private String osName;
private List<String> filenames = new ArrayList<String>();
/**
* @param host
* @param username
* @param password
* @param port
*/
public SftpHelper(String host, String username, String password, int port) {
this(host, username, password, port, "");
}
/**
* @param host
* @param username
* @param password
* @param port
* @param location
*/
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;
}
/**
* @param filename
*/
public void addFilename(String filename){
filenames.add(filename);
}
/**
* @param filenames
*/
public void setFilenames(List<String> filenames){
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.setUserInfo(new UserInfo()
{
public String getPassphrase()
{
return null;
}
public String getPassword()
{
return null;
}
public boolean promptPassword(String string)
{
return false;
}
public boolean promptPassphrase(String string)
{
return false;
}
public boolean promptYesNo(String string)
{
return true;
}
public void showMessage(String string)
{
}
});
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<filenames.size(); i++){
String filename = filenames.get(i);
if(filename == null || "".equals(filename)){
continue;
}
int idx= filename.lastIndexOf(File.separator);
String uploadname = filename.substring(idx==-1?0:idx+1);
out = c.put(uploadname);
sleep(1000);
in = new FileInputStream(filename);
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;
}