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 ...
随机推荐
- SQL 模糊查询
在进行数据库查询时,有完整查询和模糊查询之分.一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1,%:表示任意0个 ...
- css div旋转之后自适应
css: .rotate90deg { transform: rotate(90deg); -ms-transform: rotate(90deg); /* IE 9 */ -moz-transfor ...
- JavaScript入门(三)
循环结构的执行步骤 1.声明循环变量: 2.判断循环条件: 3.执行循环体操作: 4.更新循环变量: 然后循环执行2~4,直到条件不成立时,跳出循环. [While循环] while循环()中的表达式 ...
- java 常用命令工具
1. jmap (1)分析堆信息 jmap -heap java_pid (2) 导出 java进程 5460 的堆内容 到文件 heap.map ,然后使用 jhat 分析 jmap -dump:l ...
- Javaweb分页功能简单实现
效果如下图 数据库中的数据 页面效果 首先,创建一个通用类Page,代码及 ...
- HTML 输入类型
HTML 输入类型 输入类型 本章描述 <input> 元素的输入类型. 输入类型:text <input type="text"> 定义供文本输入的单行输 ...
- web安全:QQ号快速登录漏洞及被盗原理
为什么你什么都没干,但QQ空间中却发了很多小广告?也许你的QQ账号已经被盗.本文将讲解一个QQ的快速登录的漏洞. 我前阵子在论坛上看到一个QQ的快速登录的漏洞,觉得非常不错,所以把部分原文给转到园子来 ...
- ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) python代码报错
import sys reload(sys) sys.setdefaultencoding('utf-8')
- [js高手之路]深入浅出webpack教程系列4-插件使用之html-webpack-plugin配置(上)
还记得我们上文中的index.html文件吗? 那里面的script标签还是写死的index.bundle.js文件,那么怎么把他们变成动态的index.html文件,这个动态生成的index.htm ...
- chrome开发工具指南(八)
编辑 DOM Chrome DevTools 的 Elements 面板中的 DOM 树视图可以显示当前网页的 DOM 结构.通过 DOM 更新实时修改页面的内容和结构. DOM 定义您的页面结构.每 ...