import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
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.moonlight.sdk.consts.SystemConst;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* SFTP工具类
*/
public class SftpUtils {
public static Logger log = LoggerFactory.getLogger(SftpUtils.class);
static Session sshSession = null;
/**
* 获取ChannelSftp
*/
public static ChannelSftp getConnectIP(String host, String sOnlineSftpPort, String username, String password) {
int port = 0;
if (!("".equals(sOnlineSftpPort)) && null != sOnlineSftpPort) {
port = Integer.parseInt(sOnlineSftpPort);
}
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
sshSession = jsch.getSession(username, host, port);
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
} catch (Exception e) {
e.printStackTrace();
}
return sftp;
}
/**
* 上传
*/
public static void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sftp.isConnected()) {
sshSession.disconnect();
sftp.disconnect();
}
}
}
/**
* 上传
*/
public static void upload(String directory, File file, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sftp.isConnected()) {
sshSession.disconnect();
sftp.disconnect();
}
}
}
/**
* 下载
*/
public static 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();
} finally {
if (sftp.isConnected()) {
sshSession.disconnect();
sftp.disconnect();
}
}
}
/**
* 查看
*/
public static List<String> check(String directory, ChannelSftp sftp) {
List<String> fileList = new ArrayList<>();
try {
sftp.cd(directory);
ListIterator a = sftp.ls(directory).listIterator();
while (a.hasNext()) {
fileList.add((String) a.next());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sftp.isConnected()) {
sshSession.disconnect();
sftp.disconnect();
}
}
return fileList;
}
/**
* 删除
*/
public static void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sftp.isConnected()) {
sshSession.disconnect();
sftp.disconnect();
}
}
}
/***
* 字符串写入文件
* @param content
* @param fileName
* @return
*/
public static File writeFile(String content, String fileName) {
if (fileName == null) {
return null;
}
File file = new File(fileName);
FileOutputStream out=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
try {
out = new FileOutputStream(file);
osw = new OutputStreamWriter(out,"utf-8");
bw =new BufferedWriter(osw);
bw.append(content).append("\r\n");
} catch (Exception e) {
e.printStackTrace();
}finally{
if(bw!=null){
try {
bw.close();
} catch (IOException e) {
log.error("", e);
}
}
if(osw!=null){
try {
osw.close();
} catch (IOException e) {
log.error("", e);
}
}
if(out!=null){
try {
out.close();
} catch (IOException e) {
log.error("", e);
}
}
}
return file;
}
/***
* 采用配置文件里面默认配置参数进行上传
* @param content
* @param fileName
*/
public static void upload(String content, String fileName) {
File file = writeFile(content, fileName);
ChannelSftp ftp = getConnectIP(SystemConst.SFTP_HOST, SystemConst.SFTP_PORT, SystemConst.SFTP_USER, SystemConst.SFTP_PWD);
upload(SystemConst.SFTP_DIR, file, ftp);
}
public static void main(String[] args) {
ChannelSftp ftp = getConnectIP("127.0.0.1", "22", "", "");
check("", ftp);
}
}