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. 三.protobuf3标量值类型

    Protobuf3 标量值类型 标量消息字段可以具有以下类型之一——该表显示了.proto文件中指定的类型,以及自动生成的类中的相应类型: .proto类型 说明 C++ 类型 Java 类型 Pyt ...

  2. 语义(Semantics)

    流计算语义(Semantics)的定义 每一条记录被流计算系统处理了几次 有三种语义: 1.At most once 一条记录要么被处理一次,要么没有被处理 2.At least once 一条记录可 ...

  3. C++处理异常

    C++处理异常

  4. Vue 项目目录结构分析

    Vue项目目录结构分析 ├── v-proj | ├── node_modules // 当前项目所有依赖,一般不可以移植给其他电脑环境 | ├── public | | ├── favicon.ic ...

  5. Python中json.dump() 和 json.dumps()的区别

    JSON字符串用json.dumps, json.loads JSON文件名用json.dump, json.load 以下内容摘自:<Python Cookbook> json 模块提供 ...

  6. 018_Python3 模块

    在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...

  7. IIS服务部署页面

    本周学习内容 1.看完了html和黑客达人迷剩下的3/5,总结黑客达人迷: 2.编写网站部署到本地IIS服务器,设置防火墙策略: 3.安装nmap,使用nmap扫描同组计算机: 4.使用SVN提交每日 ...

  8. myaliyun ECS 启动内外穿透工具shell脚本

    #!/bin/bash tbp=/usr/local/ngrok cmd=$1 if [[ -z $cmd ]];then echo "err!usage{sh $0 1|0 to star ...

  9. 洛谷 P1901 发射站 题解

    P1901 发射站 题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的 ...

  10. SDOI2015做题记录

    由于我懒,并且这里面除了D2T3恶心以外都不难写,所以很多代码都没写-- 排序 对于某一个合法的操作序列(操作序列定义为每次交换的两组数),可以随意交换顺序,仍然合法.所以对于一个操作集合,答案就加\ ...