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. springboot+jpa多表查询

    背景 关联起来查询三个表的数据 步骤 定义接收结果的中间类 在 @Query 中编写 HSQL 从数据库查询 代码 定义接收结果的中间类 IterationVo.java /** * Iteratio ...

  2. python - 一键复习知识点

    ## rest规范:    通过不同的 method 找到对应的 url ## Django 请求生命周期 - wsgi ,它就是socket 服务端,服务端接收用户请求并将请求初次封装,然后交给 D ...

  3. (转载) 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁 ...

  4. MySQL 效率提高N倍的19条MySQL优化秘籍

    一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型.一个好的sql语句至少 ...

  5. c++和cuda混合编程 实现传统神经网络

    直接放代码了... 实现的是x1+x2=y的预测,但梯度下降很慢...233333,gpu运行时间很快!! // // main.cpp // bp // // Created by jzc on 2 ...

  6. 数组思维 -- join的一些用法感悟

    组合字符串的时候, 组合 sql 的时候, 使用join 会非常有用, join  and   记得前端时间去看面试题的时候, 总会出一个小的性能题目, 就是   如果有大量的字符串处理的时候, 怎么 ...

  7. shell 一次性杀掉相同名称的进程

    这条命令将会杀掉所有含有关键字"LOCAL=NO"的进程 ps -ef|grep LOCAL=NO|grep -v grep|cut -c -|xargs kill - 另一种方法 ...

  8. shell history 命令

    1.history命令可以显示历史执行过的命令: 2.使用!+序号执行该序号对应的命令: 例子 $ history sed 's/haha/hello/g' test cat test cat tes ...

  9. 部署Hadoop集群之前的一些系统配置

    修改内核参数 在/etc/sysctl.conf文件中添加如下配置(需要root权限)以下参数的默认值是在centos7下查看的fs.file-max = 6815744 //文件描述符总数,默认值: ...

  10. 小程序wepy购物车的逻辑

    <!-- 剩余可销售商品数量 大于 0,且购买未达上限--> <view wx:if="{{(detaildata.boughtNum < detaildata.bu ...