Java Sftp上传下载文件
需要使用jar包 jsch-0.1.50.jar
sftp上传下载实现类
package com.bstek.transit.sftp; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; 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; public class SFtpClient { private String ftpHost; private int ftpPort; private String uploadRemotePath; //上传到的服务器目录 private String downloadRemotePath;//从服务器哪个目录下载 private String userName; private String password; private int timeOut = 30000; private Session session = null; private ChannelSftp channel = null; public SFtpClient() { super(); } public SFtpClient(String ftpHost, int ftpPort, String uploadRemotePath, String downloadRemotePath, String userName, String password) { super(); this.ftpHost = ftpHost; this.ftpPort = ftpPort<=0? 22:ftpPort ; this.uploadRemotePath = uploadRemotePath; this.downloadRemotePath = downloadRemotePath; this.userName = userName; this.password = password; } /** * 利用JSch包通过SFTP链接 * @throws JSchException */ public void connect() throws JSchException { try { JSch jsch = new JSch(); session = jsch.getSession(userName, ftpHost, ftpPort); // 如果服务器连接不上,则抛出异常 if (session == null) { throw new JSchException("session is null"); } session.setPassword(password);// 设置密码 session.setConfig("StrictHostKeyChecking", "no");// 设置第一次登陆的时候提示,可选值:(ask // | yes | no) //设置登陆超时时间 session.connect(timeOut); channel = (ChannelSftp) session.openChannel("sftp");// 创建sftp通信通道 channel.connect(1000); } catch (JSchException e) { e.printStackTrace(); session.disconnect(); channel.disconnect(); throw e; } } /** * 上传文件 * @param localFile 本地上传文件 * @throws SftpException * @throws IOException */ public void uploadFile(File localFile) throws SftpException, IOException { String fullremoteFileName = this.uploadRemotePath + localFile.getName(); this.uploadFile(localFile, fullremoteFileName); } public void uploadFile(File localFile, String fullremoteFileName) throws IOException, SftpException { OutputStream outstream = null; InputStream instream = null; try { // 判断是否是文件夹 if (!isPath(fullremoteFileName.substring(0, fullremoteFileName.lastIndexOf("/")))) { createPath(fullremoteFileName.substring(0, fullremoteFileName.lastIndexOf("/"))); } outstream = channel.put(fullremoteFileName); instream = new FileInputStream(localFile); byte b[] = new byte[1024]; int n; while ((n = instream.read(b)) != -1) { outstream.write(b, 0, n); } outstream.flush(); } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { instream.close(); } catch (IOException e) { e.printStackTrace(); } try { outstream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 下载文件 * @param remeotFileName * @param downloadLocalFile 下载到本地的文件 * @throws SftpException * @throws IOException */ public void downloadFile(String remeotFileName, File downloadLocalFile) throws SftpException, IOException { String fullremoteDownloadFileName = this.downloadRemotePath + remeotFileName; this.downloadFile(downloadLocalFile, fullremoteDownloadFileName); } public void downloadFile(File downloadLocalFile, String fullremoteDownloadFileName) throws IOException, SftpException { OutputStream outstream = null; InputStream instream = null; try { instream = channel.get(fullremoteDownloadFileName); outstream = new FileOutputStream(downloadLocalFile); byte b[] = new byte[1024]; int n; while ((n = instream.read(b)) != -1) { outstream.write(b, 0, n); } outstream.flush(); } catch (IOException e) { throw e; } catch (SftpException e) { throw e; } finally { try { if(instream!=null){ instream.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(outstream != null){ outstream.close(); } } catch (IOException e) { e.printStackTrace(); } } } public void uploadFile(String localPath,String localFileName) throws SftpException, IOException { this.uploadFile(localPath,localFileName, localFileName); } public void uploadFile(String localPath,String localFileName, String remoteFileName) throws SftpException, IOException { String fullLocalFileName = localPath + localFileName; String fullremoteFileName =this.uploadRemotePath + remoteFileName; uploadFile(new File(fullLocalFileName), fullremoteFileName); } public void disconnect() { session.disconnect(); channel.disconnect(); } public void createPath(String remotePath) { String[] paths = remotePath.split("/"); String currentPath; if (remotePath.startsWith("/")) { currentPath = "/"; } else { currentPath = ""; } for (String path : paths) { if ("".equals(path)) { continue; } currentPath += path + "/"; try { channel.mkdir(currentPath); } catch (SftpException e) { // e.printStackTrace(); // throw e; } } } public boolean isPath(String remotePath) { // 判断是否是文件夹 try { channel.cd(channel.getHome()); channel.cd(remotePath); channel.cd(channel.getHome()); return true; } catch (SftpException e1) { // e1.printStackTrace(); return false; } } public static void main(String[] args) throws IOException { // String ftpHost = "10.181.77.68"; // int ftpPort = 22; // String localPath = "D:\\temp\\"; // String remotePath = "usr/WebSphere/tep/"; // String userName = "wasadm"; // String password = "wasadm"; // // SFtpClient sftp = new SFtpClient(ftpHost, ftpPort, localPath, // remotePath, userName, password); // try { // sftp.connect(); // } catch (JSchException e) { // e.printStackTrace(); // } // try { // sftp.uploadFile("helloworld\\pom.xml"); // } catch (Exception e) { // e.printStackTrace(); // } // sftp.disconnect(); } }
sftp上传下载封装类
package com.bstek.transit.sftp; import java.io.File; import java.io.IOException; import java.util.List; import org.apache.log4j.Logger; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.SftpException; public class SFtpTools { private final static Logger logger = Logger.getLogger(SFtpTools.class); private String ip ; //IP地址 private Integer port; //端口 private String username;//用户名 private String password;//密码 private String uploadRemotePath; //上传到服务器的路径 private String downloadRemotePath; //从服务器指定路径下载 public SFtpTools() { super(); } /** * * @param ip * @param port * @param username * @param password * @param uploadRemotePath * @param downloadRemotePath */ public SFtpTools(String ip, Integer port, String username,String password, String uploadRemotePath,String downloadRemotePath) { super(); this.ip = ip; this.port = port; this.username = username; this.password = password; this.uploadRemotePath = uploadRemotePath; this.downloadRemotePath = downloadRemotePath; } public void uploadFiles(File uploadFile) throws JSchException, IOException, SftpException { logger.info("connect to SFTP . ip:" + this.ip + "; port:" + this.port + ";uppath:" + this.uploadRemotePath + ";downpath:" + this.downloadRemotePath+ ";username:" + this.username + ";password:" + this.password); SFtpClient sFtpClient = new SFtpClient(ip, port, uploadRemotePath, downloadRemotePath,username, password); sFtpClient.connect(); // 上传文件 logger.info("sftp sending file....local file path = "+uploadFile.getPath()); sFtpClient.uploadFile(uploadFile); // 单台链接关闭 sFtpClient.disconnect(); } /** * 下载文件到指定的路径 * @param downloadFile * @param remeotFileName 要从服务器获取的文件名称 * @throws JSchException * @throws IOException * @throws SftpException */ public void downloadFiles(String remeotFileName, File downloadFile) throws JSchException, IOException, SftpException { logger.info("connect to SFTP . ip:" + this.ip + "; port:" + this.port + ";uppath:" + this.uploadRemotePath + ";downpath:" + this.downloadRemotePath+ ";username:" + this.username + ";password:" + this.password); SFtpClient sFtpClient = new SFtpClient(ip, port, uploadRemotePath, downloadRemotePath,username, password); sFtpClient.connect(); // 下载文件 logger.info("sftp receiving file....remote file name = "+remeotFileName); sFtpClient.downloadFile(remeotFileName,downloadFile); // 单台链接关闭 sFtpClient.disconnect(); } public static void main(String[] args) throws IOException { // SFtpUploadBat sfb = new SFtpUploadBat("10.181.77.68&10.181.68.236", "22&22", "D:\\temp\\", "tepppp/&teppp/", // "wasadm&wasadm", "wasadm&wasadm"); // try { // sfb.uploadFiles("helloworld\\"); // } catch (SftpException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (JSchException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } }
sftp上传下载调用
/** * 上传扣费文件到行方扣费系统 * @param uploadRemotePath 服务器文件路径 * @throws Exception */ public void uploadFeeFile2Core(String currDate) throws Exception { String fileName = FeeSupport.FEE_FILE_UPLOAD_PREFIX+currDate+FeeSupport.FEE_FILE_SUFFIX; //查询是否需要上传文件 String hql = "from SysFileHandle where fileName = '" + fileName+"' and fileType = '"+FeeSupport.FEE_FILE_TYPE_UPLOAD+"' and handleState != '" + FeeSupport.FEE_FILE_STATE_SUCC + "'"; SysFileHandle fileHandle = this.fileHandleDao.getFileHandleByUnique(hql); if(fileHandle!=null){ // 上传 try { SFtpTools sfb = new SFtpTools(sftpProperty.getIp(), sftpProperty.getPort(),sftpProperty.getUsername(),sftpProperty.getPassword(),sftpProperty.getUploadRemotePath(),sftpProperty.getDownloadRemotePath()); sfb.uploadFiles(new File(sftpProperty.getUploadLocalPath(),fileHandle.getFileName())); } catch (Exception e) { fileHandle.setHandleState(FeeSupport.FEE_FILE_STATE_FAIL); // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); throw e; } fileHandle.setHandleState(FeeSupport.FEE_FILE_STATE_SUCC); // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); } }
public void downloadFeeFile4Core(String currDate) throws Exception { String fileName = FeeSupport.FEE_FILE_DOWNLOAD_PREFIX+currDate+FeeSupport.FEE_FILE_SUFFIX; //查询是否需要下载文件 String hql = "from SysFileHandle where fileName = '" + fileName+"' and fileType = '"+FeeSupport.FEE_FILE_TYPE_DOWNLOAD + "'"; SysFileHandle fileHandle = this.fileHandleDao.getFileHandleByUnique(hql); if(fileHandle != null && currDate.equals(fileHandle.getCreateDate())){ return ; } if(fileHandle == null){ fileHandle = new SysFileHandle(); fileHandle.setFileName(fileName); fileHandle.setFileType(FeeSupport.FEE_FILE_TYPE_DOWNLOAD ); } this.downloadFeeFile4Core(fileHandle,currDate,fileName); } private void downloadFeeFile4Core( SysFileHandle fileHandle,String currDate,String fileName) throws Exception { //需要下载 try { SFtpTools sfb = new SFtpTools(sftpProperty.getIp(), sftpProperty.getPort(),sftpProperty.getUsername(),sftpProperty.getPassword(),sftpProperty.getUploadRemotePath(),sftpProperty.getDownloadRemotePath()); sfb.downloadFiles(fileName,new File(sftpProperty.getDownloadLocalPath(),fileName)); } catch (Exception e) { // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); throw e; } fileHandle.setHandleState(FeeSupport.FEE_FILE_STATE_NO); fileHandle.setCreateDate(currDate); // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); }
Java Sftp上传下载文件的更多相关文章
- SFTP上传下载文件、文件夹常用操作
SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文 ...
- java实操之使用jcraft进行sftp上传下载文件
sftp作为临时的文件存储位置,在某些场合还是有其应景的,比如对账文件存放.需要提供一个上传的工具类.实现方法参考下: pom.xml中引入类库: <dependency> <gro ...
- JAVA Sftp 上传下载
SftpUtils package xxx;import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com ...
- curl实现SFTP上传下载文件
摘自:https://blog.csdn.net/swj9099/article/details/85292444 #include <stdio.h> #include <stdl ...
- THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议), 只要sshd服 ...
- java:工具(汉语转拼音,压缩包,EXCEL,JFrame窗口和文件选择器,SFTP上传下载,FTP工具类,SSH)
1.汉语转拼音: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuP ...
- Java SFTP 上传、下载等操作
Java SFTP 上传.下载等操作 实际开发中用到了 SFTP 用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch 写了个工具类记录下,便于日后使用. JSch是 SSH2 的纯Java ...
- Xshell5下利用sftp上传下载传输文件
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...
- SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例
本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...
随机推荐
- VS2017 Cordova 出现错误 @ionic/app-scripts 未安装
在安装vs2017 Cordova中遇到出现错误 @ionic/app-scripts 未安装 在系统添加环境变量SASS_BINARY_PATH,将我们下载的win32-ia64-47_bindin ...
- Linux安装MariaDB(Mysql)和简单配置
1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...
- LINQ to Entities 中的查询
MSDN地址:https://msdn.microsoft.com/zh-cn/library/bb399367%28v=vs.100%29.aspx .NET Framework 4 查询是一种从数 ...
- MarkDown---超强文本编辑器
What you see Is What you get ... --------------------------- Salmon 编辑器界面: ------------------------ ...
- [js高手之路]设计模式系列课程-单例模式实现模态框
什么是单例呢? 单,就是一个的意思.例:就是实例化出来的对象,那合在一起就是保证一个构造函数只能new出一个实例,为什么要学习单例模式呢?或者说单例模式有哪些常见的应用场景.它的使用还是很广泛,比如: ...
- python+selenium自动化软件测试(第15章):基础实战(2)
#coding:utf-8 #for windows/py2.7 from time import sleep from selenium import webdriver browser = web ...
- CSS3笔记之第四天
CSS3 2D 转换 了解2D变换方法: translate() rotate() scale() skew() matrix() translate()方法,根据左(X轴)和顶部(Y轴)位置给定的参 ...
- 我理解的Java中重载与重写
程序中我们用方法来实现对对象的操作,但是对象可能有不同的数据类型,这时候对不同的数据类型,进行相同的操作,我们就可以用到方法的重载,即方法名相同,但是具有不同的参数列表. 方法的重载可以根据传递参数的 ...
- IBM与麻省理工学院联合建立AI实验室 承诺投资2.4亿美元
IBM和麻省理工学院将通过今天宣布的一个新的联合实验室共同努力,对人工智能进行广泛的研究.麻省理工学院IBM沃森AI实验室将重点关注四个研究支柱:开发AI算法,使用物理学来创建AI计算的新硬 ...
- 为何webpack打包后的文件要放在服务器上才能运行
为何会有此问: 在刚开始使用vue-cli时还不知道打包后的文件要在服务中才能运行,直接点开后发现页面白板,请教大神后得知要起一个服务才能运行起来,当时我脑子中的逻辑是这样的: 因为:js代码是由浏览 ...