一、Java实现对SFTP服务器的文件的上传下载:

1、添加maven依赖:

<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version>
</dependency>

2、SFTPUtil工具类:

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Vector;  import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;  import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
* 类说明 sftp工具类
*/
public class SFTPUtil {private transient Logger log = LoggerFactory.getLogger(this.getClass());  private ChannelSftp sftp;  private Session session;  /** SFTP 登录用户名*/    private String username; /** SFTP 登录密码*/    private String password;  /** 私钥 */    private String privateKey;  /** SFTP 服务器地址IP地址*/    private String host;  /** SFTP 端口*/  private int port;  /**  * 构造基于密码认证的sftp对象  */    public SFTPUtil(String username, String password, String host, int port) {  this.username = username;  this.password = password;  this.host = host;  this.port = port;  } /**  * 构造基于秘钥认证的sftp对象 */  public SFTPUtil(String username, String host, int port, String privateKey) {  this.username = username;  this.host = host;  this.port = port;  this.privateKey = privateKey;  }  public SFTPUtil(){}  /** * 连接sftp服务器 */  public void login(){  try {  JSch jsch = new JSch();  if (privateKey != null) {  jsch.addIdentity(privateKey);// 设置私钥  }  session = jsch.getSession(username, host, port);  if (password != null) {  session.setPassword(password);    }  Properties config = new Properties();  config.put("StrictHostKeyChecking", "no");  session.setConfig(config);  session.connect();  Channel channel = session.openChannel("sftp");  channel.connect();  sftp = (ChannelSftp) channel;  } catch (JSchException e) {  e.printStackTrace();}  }    /** * 关闭连接 server  */  public void logout(){  if (sftp != null) {  if (sftp.isConnected()) {  sftp.disconnect();  }  }  if (session != null) {  if (session.isConnected()) {  session.disconnect();  }  }  }  /**  * 将输入流的数据上传到sftp作为文件。文件完整路径=basePath+directory* @param basePath  服务器的基础路径 * @param directory  上传到该目录  * @param sftpFileName  sftp端文件名  * @param in   输入流  */  public void upload(String basePath,String directory, String sftpFileName, InputStream input) throws SftpException{  try {   sftp.cd(basePath);sftp.cd(directory);  } catch (SftpException e) { //目录不存在,则创建文件夹String [] dirs=directory.split("/");String tempPath=basePath;for(String dir:dirs){if(null== dir || "".equals(dir)) continue;tempPath+="/"+dir;try{ sftp.cd(tempPath);}catch(SftpException ex){sftp.mkdir(tempPath);sftp.cd(tempPath);}}}  sftp.put(input, sftpFileName);  //上传文件} /** * 下载文件。* @param directory 下载目录  * @param downloadFile 下载的文件 * @param saveFile 存在本地的路径 */    public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{  if (directory != null && !"".equals(directory)) {  sftp.cd(directory);  }  File file = new File(saveFile);  sftp.get(downloadFile, new FileOutputStream(file));  }  /**  * 下载文件 * @param directory 下载目录 * @param downloadFile 下载的文件名 * @return 字节数组 */  public byte[] download(String directory, String downloadFile) throws SftpException, IOException{  if (directory != null && !"".equals(directory)) {  sftp.cd(directory);  }  InputStream is = sftp.get(downloadFile);  byte[] fileData = IOUtils.toByteArray(is);  return fileData;  }  /** * 删除文件 * @param directory 要删除文件所在目录 * @param deleteFile 要删除的文件 */  public void delete(String directory, String deleteFile) throws SftpException{  sftp.cd(directory);  sftp.rm(deleteFile);  }  /** * 列出目录下的文件 * @param directory 要列出的目录 * @param sftp */  public Vector<?> listFiles(String directory) throws SftpException {  return sftp.ls(directory);  }  //上传文件测试public static void main(String[] args) throws SftpException, IOException {  SFTPUtil sftp = new SFTPUtil("用户名", "密码", "ip地址", 22);  sftp.login();  File file = new File("D:\\图片\\t0124dd095ceb042322.jpg");  InputStream is = new FileInputStream(file);  sftp.upload("基础路径","文件路径", "test_sftp.jpg", is);  sftp.logout();  }
}

二、Java实现对FTP服务器的文件的上传下载

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;/*** ftp上传下载工具类*/
public class FtpUtil {/** * Description: 向FTP服务器上传文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param basePath FTP服务器基础目录* @param filePath FTP服务器文件存放路径。文件的路径为basePath+filePath* @param filename 上传到FTP服务器上的文件名 * @param input 输入流 * @return 成功返回true,否则返回false */  public static boolean uploadFile(String host, int port, String username, String password, String basePath,String filePath, String filename, InputStream input) {boolean result = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(host, port);// 连接FTP服务器// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器ftp.login(username, password);// 登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}//切换到上传目录if (!ftp.changeWorkingDirectory(basePath+filePath)) {//如果目录不存在创建目录String[] dirs = filePath.split("/");String tempPath = basePath;for (String dir : dirs) {if (null == dir || "".equals(dir)) continue;tempPath += "/" + dir;if (!ftp.changeWorkingDirectory(tempPath)) {  //进不去目录,说明该目录不存在if (!ftp.makeDirectory(tempPath)) { //创建目录//如果创建文件目录失败,则返回System.out.println("创建文件目录"+tempPath+"失败");return result;} else {//目录存在,则直接进入该目录ftp.changeWorkingDirectory(tempPath); }}}}//设置上传文件的类型为二进制类型ftp.setFileType(FTP.BINARY_FILE_TYPE);//上传文件if (!ftp.storeFile(filename, input)) {return result;}input.close();ftp.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}/** * Description: 从FTP服务器下载文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param remotePath FTP服务器上的相对路径 * @param fileName 要下载的文件名 * @param localPath 下载后保存到本地的路径 * @return */  public static boolean downloadFile(String host, int port, String username, String password, String remotePath,String fileName, String localPath) {boolean result = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(host, port);// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器ftp.login(username, password);// 登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录FTPFile[] fs = ftp.listFiles();for (FTPFile ff : fs) {if (ff.getName().equals(fileName)) {File localFile = new File(localPath + "/" + ff.getName());OutputStream is = new FileOutputStream(localFile);ftp.retrieveFile(ff.getName(), is);is.close();}}ftp.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}//ftp上传文件测试main函数public static void main(String[] args) {try {  FileInputStream in=new FileInputStream(new File("D:\\Tomcat 5.5\\pictures\\t0176ee418172932841.jpg"));  boolean flag = uploadFile("192.168.111.128", 21, "用户名", "密码", "/www/images","/2017/11/19", "hello.jpg", in);  System.out.println(flag);  } catch (FileNotFoundException e) {  e.printStackTrace();  }  }
}

Java使用SFTP和FTP两种连接服务器的方式实现对文件的上传下载相关推荐

  1. 使用java对ftp进行文件的上传下载demo

    本文引用了https://www.cnblogs.com/lr393993507/p/5502266.html资源,并做了一些优化 这里有个写好的java项目demo,csdn好像擅自给我的资源加了很 ...

  2. FTP客户端--实现FTP文件的上传下载功能

    现在是2017.6.16的1点多,这几天刚好做了个FTP客户端的计网实验,就把思路过程和源码发上来吧! 一.设计思路:首先,登陆指定的FTP服务器(指定服务器的IP和用户名,密码,端口号若无就默认为2 ...

  3. java 文件下载 组件_java文件夹上传下载组件

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. *如何分片: *如何合成一个文件: *中断了从哪个分片开始. ...

  4. 远程连接Linux服务器并实现文件的上传下载

    我看网上关于远程服务器的文件上传下载教程都非常简洁~但是大多数漏掉了一些处理上的细节,这里进行一个稍微详细一点的总结. 远程连接服务器 在本机的cmd或本地Linux系统下,使用如下ssh命令进行连接 ...

  5. FTP 两种连接模式

    简介 FTP协议要用到两个TCP连接, 一个是命令连接,用来在FTP客户端与服务器之间传递命令:另一个是数据连接,用来上传或下载数据.通常21端口是命令端口,20端口是数据端口.当混入主动/被动模式的 ...

  6. Java连接FTP服务器并且实现对其文件的上传和下载

    概述 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".FTP作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用.F ...

  7. webstorm两个文件比对_webstorm/phpstorm配置连接ftp快速进行文件比较(上传下载/同步)操作...

    这些功能是平常IDE,FTP软件中少见的,而且是很耗工作时间的一个操作.换句话说,在Webstorm/Phpstorm中操作ftp能找到原来版本控制的感觉.唯一的缺点是:上传,下载的打开链接要稍费时间 ...

  8. 平安金管家显示连接服务器失败,平安金管家平安run上传步数失败请更换原设备手机详细解决教程...

    从2020年9月25号开始,金管家一次大更把平安RUN的部分漏洞给修复了!具体修复以下漏洞. 1.更换设备也可以上传步数: 2.时间不准确时也可以上传步数: 3.越狱及ROOT手机也可以上传步数: 4 ...

  9. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

最新文章

  1. 通过conda命令卸载已安装的各种包
  2. 企业级的开发组件02 - DevExpress DXperience Universal 2011.2.5 Final
  3. Cocos2dx利用intersectsRect函数检测碰撞
  4. 学校为什么要单位接收函_学校为什么要做校园文化建设?
  5. [vue] vue的:class和:style有几种表示方式?
  6. 2008年度一个下岗程序员的真实经历
  7. pyqt界面屏幕分辨率自适应_在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
  8. abi-api, arm target triplet https://en.wikipedia.org/wiki/ARM_architecture
  9. APP UI自动化测试:框架选择、环境搭建、脚本编写……全总结
  10. 【HDOJ 3790】最短路径问题,Dijkstra最短路,双边权
  11. 【5分钟 Paper】(TD3) Addressing Function Approximation Error in Actor-Critic Methods
  12. 算法第四版_第二章_练习题_2.1.1~2.1.12
  13. Windows 程序设计应用开发(上部)
  14. 为什么在计算机里打开U盘会闪退,U盘闪退怎么办?
  15. Memory stream is not expandable
  16. win10计算机管理权限,win10如何获取管理员权限?win10获取最高权限的方法
  17. LX4056耐高压线性锂电池充电IC(耐压30V,带OVP,带NTC)
  18. BNB、HT、OKB全面估值分析——平台币还能涨多少倍?
  19. HBuilderX网站打包APP
  20. Unity模型制作导出规范

热门文章

  1. 计算机设计学校,计算机设计制作大赛
  2. c语言的程序框图怎么写,C语言课程设计————写下流程图! 谢谢
  3. 直播丨BMMeetup第2期:大模型计算加速技术,2场特邀和7位青年学者技术报告联袂上演...
  4. 又是Dropout两次!这次它做到了有监督任务的SOTA
  5. 2020年度“CCF-百度松果基金”评审结果公示
  6. 本周值得读的15篇AI论文,还有源码搭配服用
  7. pytorch拼接函数:torch.stack()和torch.cat()--详解及例子
  8. ACM-ICPC 2018 焦作赛区网络预赛
  9. python 2x与python 3x是否兼容_使.next()与Python2和3兼容
  10. python读取只读word只读_Python用于NLP :处理文本和PDF文件