SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。(来自百度的解释)

JSch是Java Secure Channel的缩写。

JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。

下面只介绍如何使用JSch实现的SFTP功能(只有下载操作)

首先创建一个Util类,在类中实现如下方法:

该类的作用是建立连接FTP通道(getChannel)。

参数说明:

ftpHost:为连接FTP的ip地址

ftpPassword:连接FTP服务器的用户密码

ftpUserName:连接FTP服务器的用户名

ftpPort:连接FTP服务器的端口

timeout:连接FTP服务器的超时时间

public static ChannelSftp getChannel(String ftpHost, String ftpPassword, String ftpUserName, int ftpPort, int timeout) throws JSchException {

JSch jsch = new JSch(); // 创建JSch对象

session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象

if (ftpPassword != null) {

session.setPassword(ftpPassword); // 设置密码

}

Properties config = new Properties();

config.put("StrictHostKeyChecking", "no");

session.setConfig(config); // 为Session对象设置properties

session.setTimeout(timeout); // 设置timeout时间

session.connect(); // 通过Session建立链接

channel = session.openChannel("sftp"); // 打开SFTP通道

channel.connect(); // 建立SFTP通道的连接

System.out.println("SFTP通道连接成功");

return (ChannelSftp) channel;

}

然后在写一个方法,该方法的作用是关闭连接通道;

public static void closeChannel() throws Exception {

if (channel != null) {

channel.disconnect();

}

if (session != null) {

session.disconnect();

}

}

在每次操作完文件后都要调用该静态方法。

最后在创建一个下载FTP文件的Util类。

参数说明:

downPath:下载到本地文件的目录

fileName:要下载的文件名称

ftpPath:要下载文件所在的目录路径

ftpHost:为连接FTP的ip地址

ftpPassword:连接FTP服务器的用户密码

ftpUserName:连接FTP服务器的用户名

ftpPort:连接FTP服务器的端口

timeout:连接FTP服务器的超时时间

这里使用的文件流的形式下载,解决读取文件不换行的问题。

public boolean readForFstp(String downPath,String fileName,String ftpUserName, String ftpPassword, String ftpPath, String ftpHost, int ftpPort,int timeout){

boolean isSucced = false;

StringBuffer resultBuffer = new StringBuffer();

InputStream in = null;

ChannelSftp channelSftp  = null;

ByteArrayOutputStream writer = null;

try {

//获取操作通道

channelSftp = FTPUtil.getChannel(ftpHost, ftpPassword, ftpUserName, ftpPort, timeout);

//本地存储文件path

String localFilePath = downPath + File.separatorChar + fileName;

File file = new File(localFilePath);

BufferedWriter bw = null;

if(file.exists()){

logger.info("该文件已存在");

return isSucced;

}else{

bw = new BufferedWriter(new FileWriter(file));

channelSftp.cd(ftpPath);

in = channelSftp.get(fileName);

if (in != null) {

BufferedReader br = new BufferedReader(new InputStreamReader(in));

String data = null;

while ((data = br.readLine()) != null) {

resultBuffer.append(data + "\r\n");

//                        resultBuffer.append(data + "\n");

}

System.out.println("##################下载FTP文件##################");

System.out.println(resultBuffer.toString());

bw.write(resultBuffer.toString());

}else {

logger.error("找不到指定文件");

return isSucced;

}

in.close();

bw.close();

isSucced = true;

}

} catch (Exception e) {

logger.error("xjw: 下载Ftp文件失败");

e.printStackTrace();

}finally{

try {

if(writer != null) {

writer.close();

}

FTPUtil.closeChannel();

} catch (Exception e2) {

e2.printStackTrace();

}

}

return isSucced;

}

有以上的几个类就可以实现对FTP服务器文件的操作,在需要下载文件时调用readForFstp()方法即可。

结束

JAVA ftps设置_Java使用JSCH实现对FTPS服务器文件操作相关推荐

  1. java远程关机_通过jsch实现对linux服务器的shell客户端远程控制关机完整示例代码分享...

    一.前言 由于前些阵子想找个ssh客户端 for android实现在手机上可以远程控制Centos服务器实现在手机上远程关机操作,找了一圈没有合适的,因此自己想通过linux的客户端接入包jsch实 ...

  2. java poi读取word中附件_java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  3. 用Python脚本实现对Linux服务器的监控

    一.前言 二.概述 三.Python 版本说明 四./proc 文件系统 五.对CPU监测 六.对系统负载监测 七.对内存信息的获取 八.对网络接口的监测 九.监控apache服务器进程的Python ...

  4. 【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作

    使用Scala二次开发Spark实现对MySQL的upsert操作 背景 在我们的数仓升级项目中,遇到了这样的场景:古人开发的任务是使用DataStage运算后,按照主键[或者多个字段拼接的唯一键]来 ...

  5. VC实现对Excel表格的操作

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...

  6. 用 Python 脚本实现对 Linux 服务器的监控

    版本说明 Linux 服务器是 Ubuntu 12.10 Python 版本 是 2.7 工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核, ...

  7. java iris_利用K-Means聚类算法实现对iris.data.ulab

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...

  8. java实现对properties类型文件的读写

    在java项目中,我们通常会有一些配置属性的数据,采用properties文件对数据进行管理是很有必要的,尤其是在属性值改变和项目环境发生变化时,所以特地总结一下对properties文件的最常见的操 ...

  9. java classpath设置_Java CLASSPATH设置

    Java CLASSPATH设置 CLASSPATH: CLASSPATH是一个环境变量,Application ClassLoader使用它来定位和加载.class文件. CLASSPATH定义路径 ...

最新文章

  1. js进阶 13-6 jquery动画效果相关常用函数有哪些
  2. Python3 之 JSON
  3. JSONP跨域的原理解析
  4. IOS基础之计算器的编写
  5. Taro+react开发(66):注意定义margin的位置
  6. php 导出excel 2007,使用PHPExcel导出Excel表
  7. Pycharm知识点
  8. 计算机专业认证协会,2017计算机类专业认证委员会工作总结会在京召开
  9. WORD中如何转换符号的全角半角
  10. CCNA考试题库中英文翻译版及答案15
  11. hibernate查询的方式 都有哪些
  12. 谷歌浏览器访问端口限制
  13. Win10 添加传统照片查看器
  14. (基础)单个字符的大小写转换
  15. for循环下标 shell_Shell数组操作 带下标遍历
  16. WPP Software Tracing
  17. 【题解】营救(二分答案)
  18. Android 彩信拦截
  19. 造个迷你小轮子-轮播公告栏
  20. Canvas - 绘制图片模糊问题(canvas 生成图片模糊)

热门文章

  1. 基于python的音乐数据分析可视化
  2. 总结——》【Redis】
  3. Python数据可视化:如何选择合适的图表可视化?(基础篇—1)
  4. Ubuntu安装TeXStudio
  5. JAVA 证书信任 :unable to find valid certification path to requested target
  6. Day17 训练营打卡
  7. h5居中loading_HUI - loading 动画
  8. C语言中的逗号表达式
  9. (三)随处可见的LED广告屏是怎么工作的呢?接入GUI
  10. Kademlia协议原理简介