Java SFTP 上传、下载等操作
ninehua 2024-11-17 19:51 54 浏览
Java SFTP 上传、下载等操作
实际开发中用到了 SFTP
用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch
写了个工具类记录下,便于日后使用。
JSch
是 SSH2
的纯Java实现。JSch
可以连接到sshd服务器并使用端口转发,X11转发,文件传输等,并且很方便的将其功能集成到Java程序中。
1、添加依赖
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
2、SFTPUtils 工具类
public class SFTPUtils {
private Logger log = LoggerFactory.getLogger(SFTPUtils.class);
private String host; // 主机名称/IP
private int port = 22; // 端口
private String username; // 用户名
private String password; // 密码
private ChannelSftp sftp = null;
private Channel channel = null;
private Session session = null;
public SFTPUtils(String host, String userName, String password) {
this.host = host;
this.username = userName;
this.password = password;
}
public SFTPUtils(String host, int port, String userName, String password) {
this.host = host;
this.port = port;
this.username = userName;
this.password = password;
}
/**
* 连接SFTP服务器
*
* @throws JSchException
*/
public void connect() throws JSchException {
JSch jSch = new JSch();
session = jSch.getSession(username, host, port);
session.setPassword(password);
session.setConfig(this.buildConfig());
session.connect();
channel = session.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
log.info("连接主机:{} 登录成功", host);
}
/**
* 构建连接配置参数
*
* @return Properties
*/
private Properties buildConfig() {
Properties properties = new Properties();
properties.put("StrictHostKeyChecking", "no");
return properties;
}
/**
* 关闭连接
*/
public void disconnect() {
try {
if (sftp.isConnected()) {
sftp.disconnect();
}
if (channel.isConnected()) {
channel.disconnect();
}
if (session.isConnected()) {
session.disconnect();
}
} catch (Throwable e) {
//ignore
}
}
/**
* 下载文件
*
* @param sftpPath 服务器路径,不指定路径默认是FTP的根路径,指定路径是指的SFTP的根路径下开始。
* 例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;
* 指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。
* @param fileName 文件名
* @param toFilePath 下载保存文件路径,路径+文件名,例如:d:/test.txt
* @return
*/
public boolean downloadFile(String sftpPath, String fileName, String toFilePath) {
FileOutputStream fileOutputStream = null;
try {
if (StringUtils.isNotBlank(sftpPath)) {
sftp.cd(sftpPath);
}
fileOutputStream = new FileOutputStream(new File(toFilePath));
sftp.get(fileName, fileOutputStream);
return true;
} catch (Exception e) {
log.error("下载文件错误", e);
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
//ignore
}
}
}
return false;
}
/**
* 上传文件
*
* @param sftpPath 服务器路径,不指定路径默认是FTP的根路径,指定路径是指的SFTP的根路径下开始。
* 例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;
* 指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。
* @param fileName 上传后文件名
* @param localFilePath 文件路径,路径+文件名,例如:d:/test.txt
* @return
*/
public boolean uploadFile(String sftpPath, String fileName, String localFilePath) {
FileInputStream inputStream = null;
try {
if (StringUtils.isNotBlank(sftpPath)) {
sftp.cd(sftpPath);
}
inputStream = new FileInputStream(new File(localFilePath));
sftp.put(inputStream, fileName);
return true;
} catch (Exception e) {
log.error("上传文件错误", e);
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
//ignore
}
}
}
return false;
}
/**
* 上传文件
*
* @param sftpPath 服务器路径,不指定路径默认是FTP的根路径,指定路径是指的SFTP的根路径下开始。
* 例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;
* 指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。
* @param fileName 上传后文件名
* @param inputStream 文件输入流
* @return
*/
public boolean uploadFile(String sftpPath, String fileName, InputStream inputStream) {
try {
if (StringUtils.isNotBlank(sftpPath)) {
sftp.cd(sftpPath);
}
sftp.put(inputStream, fileName);
return true;
} catch (Exception e) {
log.error("上传文件错误", e);
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
//ignore
}
}
}
return false;
}
/**
* 删除文件
*
* @param sftpPath 服务器路径,不指定路径默认是FTP的根路径,指定路径是指的SFTP的根路径下开始。
* 例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;
* 指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。
* @param fileName 文件名
* @return
*/
public boolean deleteFile(String sftpPath, String fileName) {
try {
if (StringUtils.isNotBlank(sftpPath)) {
sftp.cd(sftpPath);
}
sftp.rm(fileName);
return true;
} catch (Exception e) {
log.error("删除文件失败", e);
}
return false;
}
/**
* 查询指定目录下信息
*
* @param sftpPath 服务器路径,不指定路径默认是FTP的根路径,指定路径是指的SFTP的根路径下开始。
* 例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;
* 指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。
* @return
*/
public List<String> listFiles(String sftpPath) throws SftpException {
Vector files = sftp.ls(sftpPath);
List<String> result = new ArrayList<String>();
Iterator iterator = files.iterator();
while (iterator.hasNext()) {
LsEntry isEntity = (LsEntry) iterator.next();
result.add(isEntity.getFilename());
}
return result;
}
}
在使用的的时候,需要调用 connect()
开启连接,使用完后调用 disconnect()
关闭连接 。
jsch
官方的文档说明 http://www.jcraft.com/jsch/
本文主要用于个人记录笔记!
相关推荐
- PS 2019软件分享 (免费分享) ps软件2019官方版网盘
-
小小愿景...
- ps基础操作调整图像大小 #平面设计
-
大家好,从今天开始我将制作PS系列课程,从入门到精通。这边我用到的PS软件是PSCC2019版本。·首先打开PS软件,然后做一个基础的设置。在菜单栏中找到编辑菜单,找到首选项,然后点击常规。在跳出对...
- 这才是真正王者PS,修图美得吓人!送你UltimateRetouch汉化插件
-
Photoshop能做什么?PS使用领域多到无法想象,只要从事图形相关工作,就需要它。UltimateRetouchV3.7.55汉化版是一款非常强大的PS人像精修磨皮调色扩展面板(win/mac...
- VAIO FH14笔记本评测:1.4Kg的高性能移动生产力 | 钛极客
-
VAIOFH14对于现代人来说,移动办公已经成为了主要工作模式。无论是公司还是家庭,一款轻薄且高性能的笔记本电脑,都成为了必须品。不知道大家对于轻薄工作本是什么印象,很多音视频内容创作者都认为它是一...
- 不吹不黑,PS最强样机插件Paper Panel,各种效果一键生成
-
俗话说得好工欲善其事,必先利其器想要成为一个优秀的设计...
- Mac软件 PS CC2019软件安装教程 mac版photoshop2021安装解决教程
-
编辑搜图请点击输入图片描述1、软件更新介绍AdobePhotoshop,简称“PS”,是一款图像处理软件。PS主要处理以像素所构成的数字图像,使用其众多的编修与绘图工具,可以有效地进行图片编辑工作。...
- 觉得PS太难学?其实超简单!PS系列教程之历史记录画笔工具的介绍
-
PS入门免费公开课第十一节PhotoshopCC2019历史记录画笔工具的介绍与运用课程介绍:本课程是一个免费的PS入门公开课,适合设计爱好者、初学者学习;Photoshop广泛运用于广告设计、网页设...
- Photoshop 2019 for Mac & Windows 永久版,不用激活?白嫖?
-
最近Adobe家的PS又更新了,头条老是有各种推送,尝试了几个发现都是骗人的。什么“点赞、转发、评论,然后私信就送”,后来都不了了之骗关注。在我尝试了度娘得到的N个网站之后,终于遇到了今天要分享的...
- 超实用PS教程!(零基础入门) ps基础教程新手入教程视频
-
应用领域:摄影后期;海报设计;文字设计;移动界面;淘宝美工;网页设计;LOGO...
- PS2018官方原版 v19.0 电脑版 ps2018版本怎么样
-
PS2018是一款图像处理软件,软件的界面也是十分的简洁又美观,其中操作使用也非常方便,是广大设计师、摄影师以及艺术家们必备的修图、P图神器的哦。同时软件现在可以让用户们使用便利的搜寻面板,在应用程序...
- Ps、Ai、Ae 全部换新标!考验辨别能力的时候到了
-
上月底,Adobe更新了品牌形象系统,最大的变化莫过于标志性红色的更鲜艳明亮。从多色到单一颜色的转变,可以确保其在所有尺寸和所有环境中都能有良好的适应性。具体可详细阅读这篇文章:Adobe更新LO...
- iPad版Photoshop CC应用开始接受公测申请
-
本周一,Adobe宣布适用于iPad的PhotoshopCC应用开始接受公测申请,这款备受期待的热门摄影/图片编辑工具将于今年晚些时候正式发布。目前Adobe已经向CreativeCloud订阅...
- Photoshop CC 2019从入门到精通视频教程(含素材)
-
适用对象:PhotoshopCC2019...
- PHOTOSHOP历年版本启动画面大全 ps历届版本
-
PS2.5PS3.0PS4.0PS5.0PS6.0PS7.0PSCSPSCS2PSCS3PSCS4PSCS5PSCS6...
- 完全免费Adobe Photoshop CC 2018图文安装步骤教程附Ps2018安装包
-
软件介绍软件名称:AdobePhotoshopCC2018...