Java SFTP 上传、下载等操作
ninehua 2024-11-17 19:51 93 浏览
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/
本文主要用于个人记录笔记!
相关推荐
- 免费办公软件LibreOffice 4.3.3正式版下载
-
IT之家(www.ithome.com):免费办公软件LibreOffice4.3.3正式版下载IT之家10月30日消息,知名文档基金会TDF正式发布旗下免费办公软件LibreOffice4.3....
- 拜拜WPS?微软这款全新的三合一Office,免费无广告,真让人惊艳
-
无论是在手机上办公,还是在电脑上办公,很多时候我们需要处理这3种文档:Word、Excel、以及PPT。而想要在手机上处理这些文档,我们一般会用到这两款软件,分别是Office和WPS。而由于Offi...
- 免费获得微软办公软件 Word、Excel 和 PowerPoint
-
是的,您无需花一分钱就可以使用微软Microsoft365中的所有工具。您可能需要从Microsoft365或者MicrosoftWord文档、PowerPoint演示文稿或其他基本工...
- 免费办公软件LibreOffice 4.3.1 正式版下载
-
IT之家(www.ithome.com):免费办公软件LibreOffice4.3.1正式版下载8月29日消息,知名文档基金会TDF正式发布旗下免费办公软件LibreOffice4.3.1正式版...
- 再见WPS!微软新出的免费Office软件,我一用就爱上了
-
步入职场后,最让你们头疼的是什么?要我说,一定是这件事情!好不容易熬到假期,约好小姐妹出门逛街,路上突然领导发来消息,要求审核几份紧急文件:强烈的求生欲使我不得不掏出WPSOffice,争分夺秒地...
- 更懂中小企业的打印机!惠普优系列LaserJet Pro 4004d打印机评测
-
对于中小企业来说,选购一台优秀的打印机能够在很大程度上提高员工的工作效率。质量高、成本低、速度快是中小企业选购打印机时最看重的三点。惠普优系列LaserJetPro4004d专业级自动双面激光打印机(...
- 真正的一机多能 选打印机选它准没错
-
对于企业用户来讲,打印机产品是必不可少的存在。为了能够有效提升办公的效率,不少用户在选择打印机时会比较关注打印机的功能和易用性。今天给大家推荐这款惠普1188nw激光一体机,就是个不错的选择。这款一体...
- 只因效率更高 618我为公司选这款打印机
-
不得不说对于中小型企业和工作室用户来说,办公的效率尤为重要。但由于中小型企业的规模较小,所以说能配备的打印机设备数量就十分有限。不少员工在打印时都会遇到排队的现象,因此影响了办公的效率。为了解决这一难...
- 千元预算购机 这三款打印机很值得买
-
现如今为了能够满足日常的打印需求,越来越多的家庭用户会考虑购买一台打印机产品。由于对打印机产品并不是很了解,不少朋友在选购时会产生困扰。今天这里给大家推荐三款打印机,价格在一千元左右,非常具有性价比。...
- 手把手教学!惠普打印机安装全流程,3分钟搞定,新手必看!
-
还在为安装惠普打印机头疼?别急,这篇超详细的安装指南,让你轻松上手,3分钟搞定!无论是USB连接还是无线设置,统统简单易懂,看完就能用!如何安装惠普打印机?_高清1080P在线观看平台_腾讯视频一、硬...
- 惠普喷墨打印机无线连接全流程指南
-
以下这些操作适用于带有无线功能的惠普喷墨打印机(像DeskJet系列、OfficeJet系列),这里面包含了三种常见的连接方式以及一些需要注意的地方一、控制面板直连法(通用型)启动准备打印机开机...
- 打印机连接Wi-Fi的详细步骤
-
以下是打印机连接Wi-Fi的详细步骤指南,涵盖主流品牌通用方法及常见问题解决:一、连接前准备工作确认设备兼容性检查打印机是否支持Wi-Fi功能(机身有Wi-Fi标识或查看说明书)。确保路由器开启2.4...
- 重新定义大粉仓,2.0版到来 惠普创系列2606sdw打印机评测
-
2019年5月,惠普发布创系列激光打印机,开启打印机“激光大粉仓1.0”时代,并首创“智能闪充”技术,随机附带的原装耗材即可实现5000页大印量,同时也让激光打印机能够实现快速充粉,15秒就可让创...
- 不足千元的打印机表现如何?实测来了
-
为了能够满足日常的打印需求,打印机已经成为了很多用户的刚需。由于购买的预算有限,不少家庭用户或者初创企业在选购打印机时,就会考虑到打印机的售价。那么不到千元的打印机表现如何,我们来看实测。1小巧的机...
- 899元的激光打印机怎么样?实测来看
-
如果日常经常会有打印文件的需求,那么购买一台打印机会更加方便。而为了追求更高的性价比,不少用户在选购打印机时会更关注打印机的价格。激光打印机相比于喷墨打印机而言,虽然打印速度上更有优势,但是价格也会更...