SFTP服务配置以及命令/代码操作
POM
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |
| <modelVersion>4.0.0</modelVersion> | |
| <groupId>com.qzc.helpers</groupId> | |
| <artifactId>j_sftp</artifactId> | |
| <packaging>jar</packaging> | |
| <version>1.0-SNAPSHOT</version> | |
| <name>j_sftp</name> | |
| <url>http://maven.apache.org</url> | |
| <dependencies> | |
| <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> | |
| <dependency> | |
| <groupId>com.jcraft</groupId> | |
| <artifactId>jsch</artifactId> | |
| <version>0.1.54</version> | |
| </dependency> | |
| <dependency> | |
| <groupId>org.apache.commons</groupId> | |
| <artifactId>commons-lang3</artifactId> | |
| <version>3.5</version> | |
| </dependency> | |
| <dependency> | |
| <groupId>junit</groupId> | |
| <artifactId>junit</artifactId> | |
| <version>4.12</version> | |
| <scope>test</scope> | |
| </dependency> | |
| </dependencies> | |
| </project> |
| package com.qzc.helpers; | |
| import com.jcraft.jsch.ChannelSftp; | |
| import com.qzc.helpers.sftp.SFTPClient; | |
| import com.qzc.helpers.sftp.SFTPConfig; | |
| import com.qzc.helpers.sftp.SFTPException; | |
| import com.qzc.helpers.sftp.SFTPParams; | |
| import com.qzc.helpers.sftp.monitor.TimerSFTPProgressMonitor; | |
| import org.apache.commons.lang3.StringUtils; | |
| import java.io.InputStream; | |
| import java.io.OutputStream; | |
| import java.util.List; | |
| /** | |
| * Create by qiezhichao on 2018/5/10 0010 19:44 | |
| */ | |
| public class SFTPHelper { | |
| private final static String sftpHost = "192.168.118.129"; | |
| private final static int sftpPort = 22; | |
| private final static String sftpUserName = "sftpuser"; | |
| private final static String sftpPassword = "19920508"; | |
| private static SFTPClient getSFTPClient() { | |
| return new SFTPClient(new SFTPConfig(sftpHost, sftpPort, sftpUserName, sftpPassword)); | |
| } | |
| /*************************************upload*************************************/ | |
| public static void uploadOverwrite(String localFilePath, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.upload(params, ChannelSftp.OVERWRITE); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadAppend(String localFilePath, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.upload(params, ChannelSftp.APPEND); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadResume(String localFilePath, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.upload(params, ChannelSftp.RESUME); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadOverwriteWithTimerMonitor(String localFilePath, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.upload(params, ChannelSftp.OVERWRITE, new TimerSFTPProgressMonitor()); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadAppendWithTimerMonitor(String localFilePath, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.upload(params, ChannelSftp.APPEND, new TimerSFTPProgressMonitor()); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadResumeWithTimerMonitor(String localFilePath, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.upload(params, ChannelSftp.RESUME, new TimerSFTPProgressMonitor()); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadOverwrite(InputStream src, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.upload(params, ChannelSftp.OVERWRITE, src); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadAppend(InputStream src, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.upload(params, ChannelSftp.APPEND, src); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadResume(InputStream src, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.upload(params, ChannelSftp.RESUME, src); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadOverwrite(InputStream src, int bufferSize, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.upload(params, ChannelSftp.OVERWRITE, src, bufferSize); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadAppend(InputStream src, int bufferSize, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.upload(params, ChannelSftp.APPEND, src, bufferSize); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void uploadResume(InputStream src, int bufferSize, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.upload(params, ChannelSftp.RESUME, src, bufferSize); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| /*************************************download*************************************/ | |
| public static void download(String remotePath, String localFilePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.download(params); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void downloadWithTimerMonitor(String remotePath, String localFilePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(localFilePath, remotePath); | |
| client.download(params, new TimerSFTPProgressMonitor()); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void download(OutputStream os, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.download(params, os); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| public static void downloadWithTimerMonitor(OutputStream os, String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = buildSFTPParams(null, remotePath); | |
| client.download(params, new TimerSFTPProgressMonitor(), os); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| } | |
| /** | |
| * 该方法使用时会出现异常:java.io.IOException: Pipe closed | |
| * 原因是在 finally 中执行了 client.close(); | |
| * | |
| * @param remotePath | |
| * @return | |
| */ | |
| @Deprecated | |
| public static InputStream download2InputStream(String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| SFTPParams params = new SFTPParams(); | |
| params.setRemoteFilepath(remotePath); | |
| return client.download2InputStream(params); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| return null; | |
| } | |
| /*************************************other*************************************/ | |
| public static List<String> ls(String remotePath) { | |
| SFTPClient client = getSFTPClient(); | |
| try { | |
| if (StringUtils.isEmpty(remotePath.trim())) { | |
| return null; | |
| } | |
| return client.ls(remotePath); | |
| } catch (SFTPException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| client.close(); | |
| } | |
| return null; | |
| } | |
| /*************************************private*************************************/ | |
| /* | |
| * 构造SFTPParams参数 | |
| * | |
| * @param remotePath | |
| * @param localFilePath | |
| * @return | |
| */ | |
| private static SFTPParams buildSFTPParams(String localFilePath, String remotePath) { | |
| SFTPParams params = new SFTPParams(); | |
| if (StringUtils.isNotEmpty(localFilePath)) { | |
| params.setLocalFilepath(localFilePath); | |
| } | |
| if (StringUtils.isNotEmpty(remotePath)) { | |
| params.setRemoteFilepath(remotePath); | |
| } | |
| return params; | |
| } | |
| } |
| package com.qzc.helpers.sftp; | |
| import com.jcraft.jsch.*; | |
| import java.io.IOException; | |
| import java.io.InputStream; | |
| import java.io.OutputStream; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| import java.util.Vector; | |
| /** | |
| * Create by qiezhichao on 2018/5/10 0011 20:36 | |
| */ | |
| public class SFTPClient { | |
| private Session session; | |
| private ChannelSftp channelSftp; | |
| private SFTPConfig sftpConfig; | |
| public SFTPClient(SFTPConfig sftpConfig) { | |
| this.sftpConfig = sftpConfig; | |
| this.connect(sftpConfig); | |
| } | |
| private void connect(SFTPConfig sftpConfig) { | |
| try { | |
| session = new JSch().getSession(sftpConfig.getSftpUserName(), | |
| sftpConfig.getSftpHost(), | |
| sftpConfig.getSftpPort()); | |
| if (null != sftpConfig.getSftpPassword()) { | |
| session.setPassword(sftpConfig.getSftpPassword()); | |
| } | |
| if (null != sftpConfig.getTimeout()) { | |
| session.setTimeout(sftpConfig.getTimeout()); | |
| } | |
| session.setConfig("StrictHostKeyChecking", "no"); // 让ssh客户端自动接受新主机的hostkey | |
| session.connect(); | |
| this.channelSftp = (ChannelSftp) session.openChannel("sftp"); | |
| this.channelSftp.connect(); | |
| } catch (JSchException e) { | |
| this.close(); | |
| e.printStackTrace(); | |
| } | |
| } | |
| public void close() { | |
| channelSftp.quit(); | |
| if (null != channelSftp) { | |
| channelSftp.disconnect(); | |
| } | |
| if (null != session) { | |
| session.disconnect(); | |
| } | |
| } | |
| /*============================================upload============================================*/ | |
| /** | |
| * @param sftpParams | |
| * @param channelSftpModel 调用的模式: ChannelSftp.OVERWRITE,ChannelSftp.APPEND,ChannelSftp.RESUME | |
| * @throws SFTPException | |
| */ | |
| public void upload(SFTPParams sftpParams, int channelSftpModel) throws SFTPException { | |
| try { | |
| channelSftp.put(sftpParams.getLocalFilepath(), sftpParams.getRemoteFilepath(), channelSftpModel); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Upload [" + sftpParams.getLocalFilepath() + "] to SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() | |
| + "[" + sftpParams.getRemoteFilepath() + "]" + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @param channelSftpModel 调用的模式: ChannelSftp.OVERWRITE,ChannelSftp.APPEND,ChannelSftp.RESUME | |
| * @param monitor 监视器 | |
| * @throws SFTPException | |
| */ | |
| public void upload(SFTPParams sftpParams, int channelSftpModel, SftpProgressMonitor monitor) throws SFTPException { | |
| try { | |
| channelSftp.put(sftpParams.getLocalFilepath(), sftpParams.getRemoteFilepath(), monitor, channelSftpModel); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Upload [" + sftpParams.getLocalFilepath() + "] to SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() | |
| + "[" + sftpParams.getRemoteFilepath() + "]" + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @param channelSftpModel 调用的模式: ChannelSftp.OVERWRITE,ChannelSftp.APPEND,ChannelSftp.RESUME | |
| * @param src 输入流 | |
| * @throws SFTPException | |
| */ | |
| public void upload(SFTPParams sftpParams, int channelSftpModel, InputStream src) throws SFTPException { | |
| try { | |
| channelSftp.put(src, sftpParams.getRemoteFilepath(), channelSftpModel); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Upload [" + sftpParams.getLocalFilepath() + "] to SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() | |
| + "[" + sftpParams.getRemoteFilepath() + "]" + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @param channelSftpModel 调用的模式: ChannelSftp.OVERWRITE,ChannelSftp.APPEND,ChannelSftp.RESUME | |
| * @param src 输入流 | |
| * @param bufferSize 数据块大小 | |
| * @throws SFTPException | |
| */ | |
| public void upload(SFTPParams sftpParams, int channelSftpModel, InputStream src, int bufferSize) throws SFTPException { | |
| OutputStream out = null; | |
| try { | |
| out = channelSftp.put(sftpParams.getRemoteFilepath(), channelSftpModel); | |
| byte[] buff = new byte[bufferSize]; // 设定每次传输的数据块大小 | |
| int read; | |
| if (out != null) { | |
| do { | |
| read = src.read(buff, 0, buff.length); | |
| if (read > 0) { | |
| out.write(buff, 0, read); | |
| } | |
| out.flush(); | |
| } while (read >= 0); | |
| } | |
| } catch (IOException e) { | |
| throw new SFTPException("Upload [" + sftpParams.getLocalFilepath() + "] to SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() | |
| + "[" + sftpParams.getRemoteFilepath() + "]" + " error.", e); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Upload [" + sftpParams.getLocalFilepath() + "] to SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() | |
| + "[" + sftpParams.getRemoteFilepath() + "]" + " error.", e); | |
| } finally { | |
| if (null != out) { | |
| try { | |
| out.close(); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| } | |
| } | |
| /*============================================download============================================*/ | |
| /** | |
| * @param sftpParams | |
| * @throws SFTPException | |
| */ | |
| public void download(SFTPParams sftpParams) throws SFTPException { | |
| try { | |
| channelSftp.get(sftpParams.getRemoteFilepath(), sftpParams.getLocalFilepath()); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Download [" + sftpParams.getRemoteFilepath() + "] from SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @param os | |
| * @throws SFTPException | |
| */ | |
| public void download(SFTPParams sftpParams, OutputStream os) throws SFTPException { | |
| try { | |
| channelSftp.get(sftpParams.getRemoteFilepath(), os); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Download [" + sftpParams.getRemoteFilepath() + "] from SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @param monitor | |
| * @throws SFTPException | |
| */ | |
| public void download(SFTPParams sftpParams, SftpProgressMonitor monitor) throws SFTPException { | |
| try { | |
| channelSftp.get(sftpParams.getRemoteFilepath(), sftpParams.getLocalFilepath(), monitor); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Download [" + sftpParams.getRemoteFilepath() + "] from SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @param monitor | |
| * @param os | |
| * @throws SFTPException | |
| */ | |
| public void download(SFTPParams sftpParams, SftpProgressMonitor monitor, OutputStream os) throws SFTPException { | |
| try { | |
| channelSftp.get(sftpParams.getRemoteFilepath(), os, monitor); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Download [" + sftpParams.getRemoteFilepath() + "] from SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() + " error.", e); | |
| } | |
| } | |
| /** | |
| * @param sftpParams | |
| * @return | |
| * @throws SFTPException | |
| */ | |
| public InputStream download2InputStream(SFTPParams sftpParams) throws SFTPException { | |
| try { | |
| return channelSftp.get(sftpParams.getRemoteFilepath()); | |
| } catch (SftpException e) { | |
| throw new SFTPException("Download [" + sftpParams.getRemoteFilepath() + "] from SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() + " error.", e); | |
| } | |
| } | |
| /*============================================other============================================*/ | |
| /** | |
| * @param remotePath | |
| * @return | |
| * @throws SFTPException | |
| */ | |
| public List<String> ls(String remotePath) throws SFTPException { | |
| try { | |
| List<String> remoteFileNameList = new ArrayList<String>(); | |
| Vector ls = channelSftp.ls(remotePath); | |
| for(Object obj:ls){ | |
| ChannelSftp.LsEntry lsEntry = (ChannelSftp.LsEntry) obj; | |
| remoteFileNameList.add(lsEntry.getFilename()); | |
| } | |
| return remoteFileNameList; | |
| } catch (SftpException e) { | |
| throw new SFTPException("List [" + remotePath + "] from SFTP " | |
| + sftpConfig.getSftpHost() + ":" + sftpConfig.getSftpPort() + " error.", e); | |
| } | |
| } | |
| } |
| package com.qzc.helpers.sftp; | |
| /** | |
| * SFTP的基础配置 | |
| * <p> | |
| * Create by qiezhichao on 2018/5/12 0012 21:19 | |
| */ | |
| public class SFTPConfig { | |
| private String sftpHost; // sftp主机地址 | |
| private int sftpPort; // sftp端口 | |
| private String sftpUserName; // sftp用户名 | |
| private String sftpPassword; // sftp密码 | |
| private Integer timeout; // 过期时间 | |
| public SFTPConfig(String sftpHost, int sftpPort, String sftpUserName, String sftpPassword) { | |
| this.sftpHost = sftpHost; | |
| this.sftpPort = sftpPort; | |
| this.sftpUserName = sftpUserName; | |
| this.sftpPassword = sftpPassword; | |
| } | |
| public String getSftpHost() { | |
| return sftpHost; | |
| } | |
| public void setSftpHost(String sftpHost) { | |
| this.sftpHost = sftpHost; | |
| } | |
| public int getSftpPort() { | |
| return sftpPort; | |
| } | |
| public void setSftpPort(int sftpPort) { | |
| this.sftpPort = sftpPort; | |
| } | |
| public String getSftpUserName() { | |
| return sftpUserName; | |
| } | |
| public void setSftpUserName(String sftpUserName) { | |
| this.sftpUserName = sftpUserName; | |
| } | |
| public String getSftpPassword() { | |
| return sftpPassword; | |
| } | |
| public void setSftpPassword(String sftpPassword) { | |
| this.sftpPassword = sftpPassword; | |
| } | |
| public Integer getTimeout() { | |
| return timeout; | |
| } | |
| public void setTimeout(Integer timeout) { | |
| this.timeout = timeout; | |
| } | |
| @Override | |
| public String toString() { | |
| return "SFTPConfig{" + | |
| "sftpHost='" + sftpHost + '\'' + | |
| ", sftpPort=" + sftpPort + | |
| ", sftpUserName='" + sftpUserName + '\'' + | |
| ", sftpPassword='" + sftpPassword + '\'' + | |
| ", timeout=" + timeout + | |
| '}'; | |
| } | |
| } |
| package com.qzc.helpers.sftp; | |
| /** | |
| * Create by qiezhichao on 2018/5/11 0011 21:37 | |
| */ | |
| public class SFTPException extends Exception { | |
| private static final long serialVersionUID = -4539012617666225876L; | |
| private Throwable cause; | |
| public SFTPException(String message) { | |
| super(message); | |
| } | |
| public SFTPException(String message, Throwable e) { | |
| super(message); | |
| this.cause = e; | |
| } | |
| public Throwable getCause() { | |
| return this.cause; | |
| } | |
| } |
| package com.qzc.helpers.sftp; | |
| /** | |
| * SFTP相关参数 | |
| * <p> | |
| * Create by qiezhichao on 2018/5/10 0010 19:36 | |
| */ | |
| public class SFTPParams { | |
| private String localFilepath; // 包含全路径的本地文件名 | |
| private String remoteFilepath; // 包含全路径的远程文件名 | |
| public String getLocalFilepath() { | |
| return localFilepath; | |
| } | |
| public void setLocalFilepath(String localFilepath) { | |
| this.localFilepath = localFilepath; | |
| } | |
| public String getRemoteFilepath() { | |
| return remoteFilepath; | |
| } | |
| public void setRemoteFilepath(String remoteFilepath) { | |
| this.remoteFilepath = remoteFilepath; | |
| } | |
| } |
| package com.qzc.helpers.sftp.monitor; | |
| import com.jcraft.jsch.SftpProgressMonitor; | |
| import java.text.DecimalFormat; | |
| import java.util.concurrent.Executors; | |
| import java.util.concurrent.ScheduledExecutorService; | |
| import java.util.concurrent.TimeUnit; | |
| /** | |
| * Create by qiezhichao on 2018/5/12 0012 12:04 | |
| */ | |
| public class TimerSFTPProgressMonitor implements SftpProgressMonitor { | |
| private boolean isTransEnd = false; // 是否传输完成 | |
| private long fileTotalSize; // 需要传输文件的大小 | |
| private long fileTransferedSize; // 已传输的大小 | |
| private ScheduledExecutorService service = Executors.newScheduledThreadPool(1); | |
| public void init(int op, String src, String dest, long max) { | |
| System.out.println("Begin transferring."); | |
| fileTotalSize = max; | |
| if (fileTotalSize != 0) { | |
| final DecimalFormat df = new DecimalFormat("#.##"); | |
| service.scheduleAtFixedRate(new Runnable() { | |
| public void run() { | |
| if (!isTransEnd) { | |
| if (fileTransferedSize != fileTotalSize) { | |
| double d = ((double) fileTransferedSize * 100) / (double) fileTotalSize; | |
| System.out.println("Current progress: " + df.format(d) + "%"); | |
| } else { | |
| isTransEnd = true; // 已传输大小等于文件总大小,则已完成 | |
| } | |
| } | |
| } | |
| }, 0, 1, TimeUnit.SECONDS); | |
| } | |
| } | |
| public boolean count(final long count) { | |
| fileTransferedSize = fileTransferedSize + count; | |
| return true; | |
| } | |
| public void end() { | |
| service.shutdown(); | |
| System.out.println("End transferring, transferedSize : " + fileTransferedSize); | |
| } | |
| } |
| package com.qzc.helpers; | |
| import org.junit.Test; | |
| import java.io.*; | |
| import java.util.List; | |
| /** | |
| * Create by qiezhichao on 2018/5/12 0012 23:17 | |
| */ | |
| public class TestSFTPHelper { | |
| @Test | |
| public void test1() { | |
| SFTPHelper.uploadOverwrite("X:\\1234.txt", "/upload"); | |
| } | |
| @Test | |
| public void test2() { | |
| SFTPHelper.uploadOverwriteWithTimerMonitor("X:\\004_software\\cn_office_professional_plus_2007_dvd_X12-38713.iso", "/upload/"); | |
| } | |
| @Test | |
| public void test3() throws FileNotFoundException { | |
| SFTPHelper.uploadOverwrite(new FileInputStream(new File("X:\\1234.txt")), "/upload/4321.txt"); | |
| } | |
| @Test | |
| public void test4() throws FileNotFoundException { | |
| SFTPHelper.uploadOverwrite(new FileInputStream(new File("X:\\1234.txt")), 256 * 1024, "/upload/4321.txt"); | |
| } | |
| @Test | |
| public void test5() { | |
| SFTPHelper.uploadAppend("X:\\1234.txt", "/upload/1234.txt"); | |
| } | |
| @Test | |
| public void test6() throws FileNotFoundException { | |
| SFTPHelper.uploadAppend(new FileInputStream(new File("X:\\1234.txt")), "/upload/1234.txt"); | |
| } | |
| @Test | |
| public void test7() throws FileNotFoundException { | |
| SFTPHelper.uploadAppend(new FileInputStream(new File("X:\\1234.txt")), 256 * 1024, "/upload/1234.txt"); | |
| } | |
| @Test | |
| public void test8() { | |
| SFTPHelper.uploadAppendWithTimerMonitor("X:\\1234.txt", "/upload/1234.txt"); | |
| } | |
| @Test | |
| public void test9() { | |
| SFTPHelper.download("/upload/1234.txt", "X:\\4321.txt"); | |
| } | |
| @Test | |
| public void test10() throws IOException { | |
| FileOutputStream fos = new FileOutputStream(new File("X:\\4321.txt")); | |
| SFTPHelper.download(fos, "/upload/1234.txt"); | |
| fos.close(); | |
| } | |
| @Test | |
| public void test11() throws IOException { | |
| FileOutputStream fos = new FileOutputStream(new File("X:\\4321.txt")); | |
| SFTPHelper.downloadWithTimerMonitor(fos, "/upload/1234.txt"); | |
| fos.close(); | |
| } | |
| @Test | |
| public void test12() throws IOException { | |
| FileOutputStream fos = new FileOutputStream(new File("X:\\4321.txt")); | |
| SFTPHelper.downloadWithTimerMonitor("/upload/1234.txt", "X:\\4321.txt"); | |
| fos.close(); | |
| } | |
| @Test | |
| public void test13(){ | |
| List<String> list = SFTPHelper.ls("/upload/"); | |
| for (String s:list){ | |
| System.out.println(s); | |
| } | |
| } | |
| } |
浙公网安备 33010602011771号