Sftp上传下载

package org.codedata;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class FtpImpl {

private String host = "192.168.1.15";
private String username = "liz";
private String password = "liz";
private int port = 2033;
private ChannelSftp sftp = null;
private String localPath = "/Users/liz/Documents";
private String remotePath = "/Users/liz/MyDocuments";
private String fileListPath = "/Users/liz/Documents/Java/workspace/MyTools/conf/file.txt";
private final String seperator = "/";

/**
* connect server via sftp
*/
public void connect() {
try {
if (sftp != null) {
System.out.println("sftp is not null");
}
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
System.out.println("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Disconnect with server
*/
public void disconnect() {
if (this.sftp != null) {
if (this.sftp.isConnected()) {
this.sftp.disconnect();
} else if (this.sftp.isClosed()) {
System.out.println("sftp is closed already");
}
}

}

public void download() {
// TODO Auto-generated method stub

}

private void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* upload all the files to the server
*/
public void upload() {
List<String> fileList = this.getFileEntryList(fileListPath);
try {
if (fileList != null) {
for (String filepath : fileList) {
String localFile = this.localPath + this.seperator
+ filepath;
File file = new File(localFile);

if (file.isFile()) {
System.out.println("localFile : "
+ file.getAbsolutePath());
String remoteFile = this.remotePath + this.seperator
+ filepath;
System.out.println("remotePath:" + remoteFile);
File rfile = new File(remoteFile);
String rpath = rfile.getParent();
try {
createDir(rpath, sftp);
} catch (Exception e) {
System.out.println("*******create path failed"
+ rpath);
}

this.sftp
.put(new FileInputStream(file), file.getName());
System.out.println("=========upload down for "
+ localFile);
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SftpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* create Directory
*
* @param filepath
* @param sftp
*/
private void createDir(String filepath, ChannelSftp sftp) {
boolean bcreated = false;
boolean bparent = false;
File file = new File(filepath);
String ppath = file.getParent();
try {
this.sftp.cd(ppath);
bparent = true;
} catch (SftpException e1) {
bparent = false;
}
try {
if (bparent) {
try {
this.sftp.cd(filepath);
bcreated = true;
} catch (Exception e) {
bcreated = false;
}
if (!bcreated) {
this.sftp.mkdir(filepath);
bcreated = true;
}
return;
} else {
createDir(ppath, sftp);
this.sftp.cd(ppath);
this.sftp.mkdir(filepath);
}
} catch (SftpException e) {
System.out.println("mkdir failed :" + filepath);
e.printStackTrace();
}

try {
this.sftp.cd(filepath);
} catch (SftpException e) {
e.printStackTrace();
System.out.println("can not cd into :" + filepath);
}

}

/**
* get all the files need to be upload or download
*
* @param file
* @return
*/
private List<String> getFileEntryList(String file) {
ArrayList<String> fileList = new ArrayList<String>();
InputStream in = null;
try {

in = new FileInputStream(file);
InputStreamReader inreader = new InputStreamReader(in);

LineNumberReader linreader = new LineNumberReader(inreader);
String filepath = linreader.readLine();
while (filepath != null) {
fileList.add(filepath);
filepath = linreader.readLine();
}
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (in != null) {
in = null;
}
}

return fileList;
}

/**
* @return the host
*/
public String getHost() {
return host;
}

/**
* @param host
*            the host to set
*/
public void setHost(String host) {
this.host = host;
}

/**
* @return the username
*/
public String getUsername() {
return username;
}

/**
* @param username
*            the username to set
*/
public void setUsername(String username) {
this.username = username;
}

/**
* @return the password
*/
public String getPassword() {
return password;
}

/**
* @param password
*            the password to set
*/
public void setPassword(String password) {
this.password = password;
}

/**
* @return the port
*/
public int getPort() {
return port;
}

/**
* @param port
*            the port to set
*/
public void setPort(int port) {
this.port = port;
}

/**
* @return the sftp
*/
public ChannelSftp getSftp() {
return sftp;
}

/**
* @param sftp
*            the sftp to set
*/
public void setSftp(ChannelSftp sftp) {
this.sftp = sftp;
}

/**
* @return the localPath
*/
public String getLocalPath() {
return localPath;
}

/**
* @param localPath
*            the localPath to set
*/
public void setLocalPath(String localPath) {
this.localPath = localPath;
}

/**
* @return the remotePath
*/
public String getRemotePath() {
return remotePath;
}

/**
* @param remotePath
*            the remotePath to set
*/
public void setRemotePath(String remotePath) {
this.remotePath = remotePath;
}

/**
* @return the fileListPath
*/
public String getFileListPath() {
return fileListPath;
}

/**
* @param fileListPath
*            the fileListPath to set
*/
public void setFileListPath(String fileListPath) {
this.fileListPath = fileListPath;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
FtpImpl ftp = new FtpImpl();
ftp.connect();
ftp.upload();
ftp.disconnect();
System.exit(0);
}

}

你可能感兴趣的:(sftp)