package shkd.utils; import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsEntry; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import java.util.Vector; /** *
* ClassName: SFTPConnectUtil *
** Description: 连接SFTP *
*/ public class SFTPConnectUtil { /** * 日志 */ private final static Log logger = LogFactory.getLog(SFTPConnectUtil.class); /** * 连接SFTP服务器 * * @param host * 主机 * @param port * 端口 * @param username * 用户名 * @param password * 密码 * @return ChannelSftp */ public static ChannelSftp connectSFTP(String host, int port, String username, String password) { // 声明ChannelSftp对象 ChannelSftp sftp = null; try { // 创建JSch对象 JSch jsch = new JSch(); // 根据用户名,主机IP,端口获取一个Session对象 Session sshSession = jsch.getSession(username, host, port); if (!isEmpty(password)) { sshSession.setPassword(password); } // 新建属性类 Properties sshConfig = new Properties(); /* * 连接新主机时,不进行公钥确认; * 在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务,由于初次连接服务器而导致自动化任务中断。 */ sshConfig.put("StrictHostKeyChecking", "no"); // 配置连接设置 sshSession.setConfig(sshConfig); // 建立连接 sshSession.connect(); // 打开SFTP通道 Channel channel = sshSession.openChannel("sftp"); // 建立SFTP通道的连接 channel.connect(); // 强转ChannelSftp对象 sftp = (ChannelSftp) channel; } catch (JSchException e) { logger.error("connectSFTP:" + e.toString()); return null; } return sftp; } /** * 上传文件 * * @param directory * 上传的目录 * @param uploadFile * 要上传的文件 * @param sftp * @return boolean */ public static boolean uploadFile(String directory, File uploadFile, ChannelSftp sftp,String fileName) { try { // 进入指定目录 sftp.cd(directory); sftp.put(new FileInputStream(uploadFile), fileName); } catch (FileNotFoundException e) { logger.error("uploadFile -- FileNotFoundException:" + e.toString()); return false; } catch (SftpException e) { logger.error("uploadFile -- SftpException:" + e.toString()); return false; } return true; } /** * 上传附件 * @param directory * @param fileInputStream * @param fileName * @param sftp * @return */ public static boolean uploadFile(String directory, FileInputStream fileInputStream,String fileName, ChannelSftp sftp) { try { // 进入指定目录 sftp.cd(directory); sftp.put(fileInputStream, fileName); } catch (SftpException e) { logger.error("uploadFile -- SftpException:" + e.toString()); return false; } return true; } /** * 下载文件 * * @param directory * 下载目录 * @param downloadFile * 下载的文件 * @param saveFile * 存在本地的路径 * @param sftp * @return boolean */ public static boolean downloadFile(String directory, String downloadFile, File saveFile, ChannelSftp sftp) { try { // 进入指定目录 sftp.cd(directory); // 下载文件到指定路径 sftp.get(downloadFile, new FileOutputStream(saveFile)); } catch (FileNotFoundException e) { logger.error("downloadFile -- FileNotFoundException:" + e.toString()); return false; } catch (SftpException e) { logger.error("downloadFile -- SftpException:" + e.toString()); return false; } return true; } /** * 删除文件 * * @param directory * 要删除文件所在目录 * @param deleteFile * 要删除的文件 * @param sftp * @return boolean */ public static boolean deleteFile(String directory, String deleteFile, ChannelSftp sftp) { try { // 进入指定目录 sftp.cd(directory); // 删除文件 sftp.rm(deleteFile); } catch (SftpException e) { logger.error("deleteFile -- SftpException:" + e.toString()); return false; } return true; } /** * 创建文件夹 * * @param directory * 目标目录 * @param creatDir * 要创建的文件 * @param sftp * @return boolean */ public static boolean createDir(String directory, String creatDir, ChannelSftp sftp) { try { // 进入指定目录 sftp.cd(directory); // 创建文件夹 sftp.mkdir(creatDir); } catch (SftpException e) { logger.error("deleteFile -- SftpException:" + e.toString()); return false; } return true; } /** * 删除文件夹 * * @param directory * 目标目录 * @param deleteDir * 要删除的文件 * @param sftp * @return boolean */ public static boolean deleteDir(String directory, String deleteDir, ChannelSftp sftp) { try { // 进入指定目录 sftp.cd(directory); // 删除文件夹 sftp.rmdir(deleteDir); } catch (SftpException e) { logger.error("deleteFile -- SftpException:" + e.toString()); return false; } return true; } /** * 列出目录下的文件 * * @param directory * 要列出的目录 * @param sftp * @return Vector