- 浏览: 52927 次
- 性别:
文章分类
最新评论
上周进行了linux环境下sftp的配置和用户权限的创建:http://jiandequn.iteye.com/blog/2414753
今天进行java下对sftp的操作,这里就不多说了,直接上代码
首先依赖包
SFtpUpload.java 类
SftpFactory.java类
今天进行java下对sftp的操作,这里就不多说了,直接上代码
首先依赖包
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency>
SFtpUpload.java 类
package com.jiahejiankang.operation.core.util.sftp; import com.jcraft.jsch.*; import org.apache.log4j.Logger; import java.io.*; public class SFtpUpload { private static Logger log = Logger.getLogger(SFtpUpload.class.getName()); private ChannelSftp sftp = null; private Session sshSession = null; public SFtpUpload(Session sshSession) { this.sshSession =sshSession; } /** * 通过SFTP连接服务器 */ public void connect() { try { Channel channel = sshSession.openChannel("sftp"); channel.connect(); if (log.isInfoEnabled()) { log.info("Opening Channel."); } sftp = (ChannelSftp) channel; if (log.isInfoEnabled()) { log.info("Connected to channel.."); } } catch (Exception e) { e.printStackTrace(); } } /** * 关闭连接 */ public void disconnect() { if (this.sftp != null) { if (this.sftp.isConnected()) { this.sftp.disconnect(); if (log.isInfoEnabled()) { log.info("sftp is closed already"); } } } } /** * 删除stfp文件 * * @param directory:要删除文件所在目录 * @param deleteFile:要删除的文件 */ public void deleteSFTP(String directory, String deleteFile) { try { // sftp.cd(directory); sftp.rm(directory + deleteFile); if (log.isInfoEnabled()) { log.info("delete file success from sftp."); } } catch (Exception e) { e.printStackTrace(); } } /** * 创建目录 * * @param createpath * @return */ public boolean createDir(String createpath) { try { if (isDirExist(createpath)) { this.sftp.cd(createpath); return true; } String pathArry[] = createpath.split("/"); StringBuffer filePath = new StringBuffer("/"); for (String path : pathArry) { if (path.equals("")) { continue; } filePath.append(path + "/"); if (isDirExist(filePath.toString())) { sftp.cd(filePath.toString()); } else { // 建立目录 sftp.mkdir(filePath.toString()); // 进入并设置为当前目录 sftp.cd(filePath.toString()); } } this.sftp.cd(createpath); return true; } catch (SftpException e) { e.printStackTrace(); } return false; } /** * 判断目录是否存在 * * @param directory * @return */ public boolean isDirExist(String directory) { boolean isDirExistFlag = false; try { SftpATTRS sftpATTRS = sftp.lstat(directory); isDirExistFlag = true; return sftpATTRS.isDir(); } catch (SftpException e) { if (e.getMessage().toLowerCase().equals("no such file")) { isDirExistFlag = false; } } return isDirExistFlag; } /** * 上传单个文件 * * @param remotePath:远程保存目录 * @param remoteFileName:保存文件名 * @param localPath:本地上传目录(以路径符号结束) * @param localFileName:上传的文件名 * @return */ public boolean uploadFile(String remotePath, String remoteFileName, String localPath, String localFileName) { FileInputStream in = null; try { createDir(remotePath); File file = new File(localPath + localFileName); in = new FileInputStream(file); sftp.put(in, remoteFileName); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SftpException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return false; } /** * @param remotePath 远程路径名 * @param file 文件格式 * @return */ public boolean uploadFile(String remotePath, File file) { FileInputStream in = null; try { createDir(remotePath); in = new FileInputStream(file); sftp.put(in, file.getName()); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SftpException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return false; } /** * * @param remotePath 目录 * @param inputStream 流 * @param remoteFileName 远程文件名 * @return */ public boolean uploadFile(String remotePath, InputStream inputStream, String remoteFileName) { try { createDir(remotePath); sftp.put(inputStream, remoteFileName); return true; } catch (SftpException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return false; } }
SftpFactory.java类
package com.jiahejiankang.operation.core.util.sftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jiahejiankang.operation.core.util.ProperManager; import org.apache.log4j.Logger; import java.io.File; import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; public class SftpFactory { private static Logger log = Logger.getLogger(SftpFactory.class.getName()); private static final String HOST = "192.168.1.44"; private static final String USERNAME = "mysftp"; private static final String PWD = "123"; private static final Integer PORT = "22"; private static final String SFTP_PATH = "upload"; private static AtomicInteger atomicInteger = new AtomicInteger(1); private static Session sshSession = null; public static SFtpUpload getSFtpUpload() { sshSession = getSession(USERNAME,HOST,PORT,PWD); SFtpUpload sFtpUpload = new SFtpUpload(sshSession); atomicInteger.getAndIncrement(); return sFtpUpload; } private static synchronized Session getSession(String username,String host,Integer port,String pwd) { if(sshSession != null){ return sshSession; } JSch jsch = new JSch(); try { sshSession = jsch.getSession(username, host, port); if (log.isInfoEnabled()) { log.info("Session created."); } sshSession.setPassword(pwd); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); if (log.isInfoEnabled()) { log.info("Session connected."); } } catch (JSchException e) { e.printStackTrace(); } return sshSession; } public static String upload(String dir, File file) { SFtpUpload sFtpUpload = getSFtpUpload(); try { sFtpUpload.connect(); if(!sFtpUpload.uploadFile(SFTP_PATH+"/"+dir,file)){ throw new Exception("上传失败"); } } catch (Exception e) { e.printStackTrace(); }finally { sFtpUpload.disconnect(); atomicInteger.getAndDecrement(); disconnect(); } StringBuffer sb = new StringBuffer("sftp://"); sb.append(USERNAME).append(":").append(PWD) .append("@").append(HOST).append(":").append(PORT) .append("/").append(SFTP_PATH).append("/").append(dir).append("/").append(file.getName()); return sb.toString(); } public static void disconnect(){ if(atomicInteger.intValue() == 1){ sshSession.disconnect(); } } }
发表评论
-
java webService之CXF的使用
2018-03-29 14:25 447使用场景:华为VOD系统与媒资系统的接口,资产数据(元数据XM ... -
java 中jstat的用法
2018-03-20 18:06 719JDK自带VM分析工具jps,jstat,jmap,jcons ... -
javaEE性能优化
2018-03-20 16:41 503性能的优化一般可以从多方面入手,前端资源,java程序,数据传 ... -
jvm gc日志检查
2018-03-20 15:08 368JVM的GC日志的主要参数包括如下几个: -XX:+Pr ... -
负载均衡的几种原理
2018-03-19 16:05 472什么是负载均衡? 就 ... -
基于TCP协议实现RPC
2018-03-19 11:28 714RPC的全称:Remote Process Call,即远程过 ... -
java 多线程
2018-03-16 13:29 354Java 多线程编程 Java 给 ... -
SpringMVC执行流程图
2018-03-15 10:46 471SpringMVC 流程图 DispatcherServle ... -
Java中BIO、NIO、AIO的原理及其区别
2018-03-12 17:34 661IO的处理方式通常分为 ... -
基于Spring 自定义标签实现
2017-11-30 09:26 556一、源码分析: Spring标签的定义分为默认标签和自定义 ... -
java二维码的生成和解析
2017-09-26 11:15 434一、本文目的: 为了研究对支付宝和微信支付的统一路口管理 ... -
spring-data-redis
2017-09-18 11:54 732Spring-data-redis使用 1、maven依赖 ... -
java,redis
2017-09-18 11:32 358Redis 简介 Redis 是完全开源免费的,遵守BSD协议 ... -
Java xml与实体Bean的转换
2017-09-05 15:24 7001、pom.xml依赖包: <dependenc ... -
Java JVM虚拟机知识要点
2017-08-30 10:25 5961、JVM虚拟机图解: ... -
java 上传小于占用空间为4k的jpg图片异常问题处理
2017-07-19 18:02 529javaWeb上传图片 jpg占用空间为4k时,Commons ... -
Springmvc 注入字符串与时间格式的转换
2017-03-24 11:10 1196以下列出两种spring支持的时间转换 -、方式一 1、 ... -
linux下修改war包
2017-03-06 15:32 1100Linux上修改war包上的文件 www.MyExceptio ... -
itellij idea 11.1.3 mybatis 自动构建代码
2016-11-16 09:50 445步骤一: 1、在工程中pom.xml加添 <buil ... -
intellij idea 下resin容器远程调试
2016-11-16 09:27 5385resin远程调试(我使用的是resin-4.0.41版本): ...
相关推荐
在Java编程中,实现Secure File Transfer Protocol (SFTP) 功能是常见的需求,尤其是在处理远程文件操作时。本文将详细讲解如何使用开源库JSch来实现在Java中进行SFTP的上传、下载以及删除文件的方法。 JSch是一个...
1分让你得到sftp常用操作工具,工具实现如下操作: 1)得到当前工作目录地址 2)改变目录为配置的远程目录 3)取文件目录列表 4)取文件列表 5)下载文件 6)复制文件 7)删除文件 8)目录是否存在,文件是否存在 9)移动文件 ...
总的来说,Java版的SFTP实现利用JSch库可以方便地进行文件的安全传输。通过理解和应用上述代码,开发者可以构建自己的SFTP客户端,实现与远程服务器的交互。这个过程涉及的主要知识点包括:SSH协议、SFTP协议、JSch...
JSch是一个纯Java实现的SSH2库,允许开发人员连接到支持SFTP的服务器,进行文件的上传、下载以及执行其他相关操作。本文将详细介绍如何使用JSch进行SFTP操作,并提供一个简单的`SftpUtil`工具类示例。 首先,我们...
本文将详细介绍如何使用Java通过SFTP实现远程文件的上传和下载,并提供一个简单的示例代码。 首先,为了实现SFTP功能,我们需要一个第三方库,如JSch(Java Secure Channel)。JSch是一个纯Java实现的SSH2库,它...
本篇文章将深入探讨如何使用Java Swing实现SFTP文件夹上传的功能,并为后续的多目标地址上传做准备。 首先,我们需要导入必要的库。在Java中,我们可以使用JSch库来实现SFTP功能。JSch是一个纯Java实现的SSH2库,它...
本文将详细探讨如何使用Java实现SFTP的文件上传和下载功能,以及如何利用jcraft库来完成这一任务。 首先,jcraft是一个日本开发者团队创建的开源项目,提供了Java实现的SSH2库,其中包括对SFTP的支持。在本示例中,...
在本篇文章中,我们将详细介绍JAVA SFTP文件上传、下载及批量下载的实例,包括相关的概念、API介绍、代码实现等方面的内容。 首先,我们需要了解什么是SFTP?SFTP(Secure File Transfer Protocol)是一种安全的...
在这个场景中,我们将详细讨论如何使用`jsch.jar`库以及提供的`SftpUtil.java`工具类来实现在Java中执行SFTP任务。 首先,`jsch.jar`是Java Secure Channel的缩写,这是一个由JCraft公司开发的开源项目。它提供了对...
JSch - Java实现的SFTP(文件上传详解篇)
本文将深入探讨如何使用Java实现SFTP(Secure File Transfer Protocol)和FTP(File Transfer Protocol)进行文件的上传与下载,以满足在Linux服务器上的操作需求。 首先,FTP是一种用于在网络之间传输文件的标准...
java使用sftp实现文件的上传与分片上传
二、Java SFTP实现库 在Java中,我们可以使用第三方库如JSch(Java Secure Channel)来实现SFTP功能。JSch是一个轻量级的SSH2库,能够提供SSH2协议下的连接、SFTP文件传输等功能。 三、JSch库的使用 1. 添加依赖:...
JSch(Java Secure Channel)是一个开放源码的Java库,它实现了SSH2协议,包括SFTP功能。在本示例中,我们将深入探讨如何使用JSch库来实现通过SFTP上传整个文件夹的功能。 首先,我们需要在项目中添加JSch库。如果...
Jsch(Java Secure Channel)是一个纯Java语言编写的库,它能够实现SSH(Secure Shell)功能。SSH是一种安全协议,它主要用于在不同的系统或服务器间建立安全的连接,并在传输数据的过程中对数据进行加密。在Java中...
Java实现SFTP(Secure File Transfer Protocol)客户端上传文件和文件夹是一项常见的任务,尤其是在系统集成或者数据迁移场景中。下面将详细介绍如何通过Java实现这一功能,主要涉及的技术点包括SFTP协议、JSch库的...
Java作为一种广泛应用的编程语言,提供了丰富的库和工具来实现SFTP功能。本篇文章将深入探讨如何使用Java进行SFTP的文件上传与下载操作。 首先,为了在Java中实现SFTP,我们需要一个支持SFTP的库,例如JSch(Java ...