package net.xwolf.ultility;
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 = "127.0.0.1";
private String username="MingMac";
private String password="×××";
private int port = 22;
private ChannelSftp sftp = null;
private String localPath = "/Users/MingMac/Documents";
private String remotePath = "/Users/MingMac/MyDocuments";
private String fileListPath = "/Users/MingMac/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
最新推荐文章于 2022-10-26 23:39:32 发布