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);
  }
  }
   
   
  }

SFTP服务配置以及命令/代码操作的更多相关文章

  1. rsync 服务配置_rsync命令使用方法

    rsync介绍 rsync用来定时备份服务器中的文件或者目录,有三种工作模式,本地复制,使用系统用户认证,守护进程方式,开源高效.同步工具,把一台机器上的文件同步都另一台机器 .默认使用873端口 选 ...

  2. Linux下 sftp服务配置

    查看openssh的版本,使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级. 参考博客:https://yq.aliyun.com/articles/6 ...

  3. Linux之sftp服务

    Linux之sftp服务 一.sftp介绍转自:[1]Linux如何开启SFTP https://www.cnblogs.com/xuliangxing/p/7120205.htmlSFTP是Secu ...

  4. Centos6.5---samba文件共享服务配置(二)

    Linux-----samba服务配置(二) 需求: 某公司销售部门提出一个文件共享需求,要求部门共享目录有三个,第一个共享目录所有销售部门人员都具有可读可写权限:第二个共享目录所有销售人员只读权限, ...

  5. OCM_第三天课程:Section1 —》表空间的操作和管理、服务配置

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  6. MySQL 事务配置命令行操作和持久化

    MySQL 事务配置命令行操作和持久化 参考 MySQL 官方参考手册 提供 5.5 5.6 5.7 8.0 版本的参考手册 https://dev.mysql.com/doc/refman/5.5/ ...

  7. Linux设置SFTP服务用户目录权限

    我们有时会遇到这样的需求,限制一个Linux用户,让他只能在指定的目录下进行添加.修改.删除操作,并且只能使用sftp登录服务器,不能用ssh操作.这些可以通过配置sftp服务实现. 提供sftp服务 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作

    redis简介 Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存 ...

  9. linux搭建svn服务并手动同步代码到web目录和自动更新

    1.安装svn服务端 yum -y install subversion 2.查看安装路径等信息 rpm -ql subversion 3.查看svn帮助信息 svn help 4.创建svn版本库目 ...

随机推荐

  1. 《少年先疯队》第八次团队作业:Alpha冲刺第三天

    前言   第三天冲刺会议    时间:2019.6.16   地点:宿舍 3.1 今日完成任务情况以及遇到的问题.   3.1.1今日完成任务情况 姚玉婷:酒店的会员信息的管理,如会员的添加,删除 马 ...

  2. docker 进程 转载:

    今天我们会分析Docker中进程管理的一些细节,并介绍一些常见问题的解决方法和注意事项. 容器的PID namespace(名空间) 在Docker中,进程管理的基础就是Linux内核中的PID名空间 ...

  3. Mybatis 不支持通配符扫包起别名问题

    typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决 package com.xxxx.xxx.util.comm ...

  4. c-free gcc.exe: cannot specify -o with -c or -S and multiple compilations的解决方法

    win10上打算使用c-free,因为xp win7时代都用过,写c代码还是比较方便的,尤其是5.0版本,但是在win10上面,c-free 5.0版本没有c-free 4好用,c-free 4启动更 ...

  5. python的isinstance()函数

    以下是使用isinstance()函数的实例: a = isinstance(a,int) # 结果返回 True isinstance(a,str) # 结果返回 False 即:第1个参数是第2个 ...

  6. 动态加载 ShellCode绕过杀软

    反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...

  7. 2019-2020-1 20199302《Linux内核原理与分析》第三周作业

    云班课学习内容 一.C语言中嵌入汇编代码 1.内嵌汇编语法 (1)C语言中嵌入汇编代码的写法: asm( 汇编语句模板: 输出部分: 输入部分: 破坏描述部分): 说明:输出部分和输入部分对应着C语言 ...

  8. MySQL 必会知识

    一.为什么用自增列作为主键 1.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引. 如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为 ...

  9. COM Error Code(HRESULT)部分摘录

    Return value/code Description 0x00030200 STG_S_CONVERTED The underlying file was converted to compou ...

  10. Servlet实现注册

    1.Servlet实现注册的思路: 2.工程结构 3.功能实现: (1)html实现对数据的收集: <body bgcolor="aqua"> <center&g ...