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 ...
随机推荐
- 最短路 - floyd算法
floyd算法是多源最短路算法 也就是说,floyd可以一次跑出所以点两两之间的最短路 floyd类似动态规划 如下图: 用橙色表示边权,蓝色表示最短路 求最短路的流程是这样的: 先把点1到其他点的最 ...
- eclipse导入SVN上的Maven多模块项目
eclipse导入SVN上的Maven多模块项目 博客分类: Eclipse&MyEclipse SVN Maven 一.SVN上Maven多模块项目结构 使用eclipse导入SVN上的 ...
- 【Linux】文件存储结构
大部分的Linux文件系统(如ext2.ext3)规定,一个文件由目录项.inode和数据块组成: 目录项:包括文件名和inode节点号. Inode:又称文件索引节点,包含文件的基础信息以及数据块 ...
- salesforce零基础学习(七十九)简单排序浅谈 篇一
我们在程序中经常需要对数据列表进行排序,有时候使用SOQL的order by 不一定能完全符合需求,需要对数据进行排序,排序可以有多种方式,不同的方式针对不同的场景.篇一只是简单的描述一下选择排序,插 ...
- jenkins 设置 gitlab web hooks
背景 接口自动化期望代码push后触发实现持续集成,代码push后,自动化执行jenkins的job. 步骤 准备工作 工具:jenkins,gitlab jenkins需要安装插件:git plug ...
- DOM树节点和事件
一.前言:DOM树节点是JS的基础语句.通过节点,能够取到HTML代码中的任意标签,从而对其进行修改和添加各种视觉效果. 二.DOM树节点 DOM节点分为三大类: 元素节点,属性节点,文本节点 ...
- MySQL下载安装、基本配置、问题处理
一 mysql介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是 ...
- 斐波那契数列—Java
斐波那契数列想必大家都知道吧,如果不知道的话,我就再啰嗦一遍, 斐波那契数列为:1 2 3 5 8 13 ...,也就是除了第一项和第二项为1以外,对于第N项,有f(N)=f(N-1)+f(N-2). ...
- Spring Cloud Netflix多语言/非java语言支持之Spring Cloud Sidecar
Spring Cloud Netflix多语言/非java语言支持之Spring Cloud Sidecar 前言 公司有一个调研要做,调研如何将Python语言提供的服务纳入到Spring Clou ...
- docker学习之--日常命令
.查看镜像 sudo docker images sudo pull docker.io #下载镜像 sudo push docker.io #上传镜像 sudo docker save -o cen ...