SFTP服务配置以及命令/代码操作

Posted chinaifae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
  }
  }
   
   
  }

以上是关于SFTP服务配置以及命令/代码操作的主要内容,如果未能解决你的问题,请参考以下文章

sftp是主动式还是被动式ftp? 使用的端口是22还是115?

SFTP应用

如何使用 Java 在 SFTP 或 FTP 服务器中压缩文件?

ftp c++操作

linux下如何使用sftp命令

ftp与sftp及sftp和scp的区别