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 ...
随机推荐
- 第6天:DIV+CSS页面布局实战
今天我从早上9:00写代码一直写到下午18:00,写的我差点抑郁了,还好最后终于写出了一个完整页面,没有做动画效果,就是练习了一下DIV+CSS布局,做的是福务达(www.zzfwd.cn)的主页,真 ...
- 无法远程连接mysql,连接后也没有权限创建数据库
问题现象:无法远程连接mysql,连接后也没有权限创建数据库 问题原因: MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web- ...
- BotVS开发基础—2.2 下限价单 交易
代码 import json def main(): Log("ORDER_STATE_PENDING:", ORDER_STATE_PENDING, ", ORDER_ ...
- django开发总结
首先我用的是虚拟机,python3.6+django1.11.0: 为了版本的一致,以及在环境种更好的体验,我们需要的是先用虚拟环境virtualenv其命令有: 1.创建环境(name是虚拟环境名字 ...
- multisim&proteus&protel比较
Multisim有超强板级的模拟/数字电路板的设计工作.它包含了电路原理图的图形输入.电路硬件描述语言输入方式,具有丰富的仿真分析能力.高版本可 以进行单片机等MCU的仿真.Multisim有实际元器 ...
- 从yum提示空间不足到根分区扩容
记录一次安装软件的报错 --1261065212@qq.com 1.系统版本(VMware 虚拟机) [root@ansible-admin ~]# cat /etc/redhat-r ...
- 传参时Url中有中文报错
url中如果传了中文,浏览器会报错:The header content contains invalid characters. 原因:浏览器自动把这个url进行decodeURIComponent ...
- Spring中@Value标签的使用详解
1.@Value标签 由于Spring对通过IOC的方式对对象进行统一管理,所以对任何对象而言,其生成方法均由Spring管理.传统的方法是通过XML配置每一个Bean,并对这个Bean的所有Fiel ...
- Linq--一个集合中查找另一个集合,需熟悉这种写法
//获取科室与病区授权的护士信息 public List<SYS_ZGKSBQDYK> GetUserWardMapByWardCode(string wardCode) ...
- C# 获取exe、dll中的图标,支持获取256x256分辨率
在网上找过许多文章,都没有成功获取过大图标,只能获取最大32x32.最后自己尝试了相关的windows api,终于找到一个可用的. 主要用到的C++的PrivateExtractIcons函数,具体 ...