SftpUtil FTP文件上传
package ftputil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class SftpUtil {
// private static final Logger LOGGER =
// LoggerFactory.getLogger(SftpUtil.class);
public static void upload(String host, int port, String username, String password, InputStream inputStream,
String remoteDirectory, String remoteFileName) throws Exception {
Sftp sftp = new Sftp();
sftp.getConnect(host, port, username, password);
sftp.upload(inputStream, remoteDirectory, remoteFileName);
sftp.disconnect();
}
public static void upload(String host, int port, String username, String password, String localFilePathName,
String remoteDirectory, String remoteFileName) throws Exception {
Sftp sftp = new Sftp();
sftp.getConnect(host, port, username, password);
File file = new File(localFilePathName);
sftp.upload(new FileInputStream(file), remoteDirectory, remoteFileName);
sftp.disconnect();
}
public static void uploadBatch(String host, int port, String username, String password,
List<String> localFilePathNameList, List<String> remoteDirectoryList, List<String> remoteFileNameList)
throws Exception {
if ((localFilePathNameList.size() != remoteDirectoryList.size())
|| (localFilePathNameList.size() != remoteFileNameList.size())) {
throw new RuntimeException("参数错误!本地文件list 和 远端目录list 以及 远端文件名 list 大小不一致。");
}
Sftp sftp = new Sftp();
sftp.getConnect(host, port, username, password);
for (int i = 0; i < localFilePathNameList.size(); ++i) {
String localFilePathName = (String) localFilePathNameList.get(i);
String remoteDirectory = (String) remoteDirectoryList.get(i);
String remoteFileName = (String) remoteFileNameList.get(i);
File file = new File(localFilePathName);
sftp.upload(new FileInputStream(file), remoteDirectory, remoteFileName);
}
sftp.disconnect();
}
public static void download(String host, int port, String username, String password, String remoteDirectory,
String remoteFileName, String localDirectorys, String localFileName) throws Exception {
Sftp sftp = new Sftp();
sftp.getConnect(host, port, username, password);
sftp.download(remoteDirectory, remoteFileName, localDirectorys, localFileName);
sftp.disconnect();
}
public static void delete(String host, int port, String username, String password, String remoteDirectory,
String remoteFileName) throws Exception {
Sftp sftp = new Sftp();
sftp.getConnect(host, port, username, password);
sftp.delete(remoteDirectory, remoteFileName);
sftp.disconnect();
}
public static void main(String[] args) throws Exception {
test();
}
private static void test() throws Exception {
long b = System.currentTimeMillis();
String host = "172.16.10.208";
short port = 22;
String username = "ftpuser";
String password = "123456";
String localFilePathName = "C:/Users/Administrator/Desktop/新建文本文档 (5).txt";
String remoteDirectory = "/home/test/";
String remoteFileName = "remoteFile_1.txt";
String localDirectorys = "C:/Users/Administrator/Desktop/";
String localFileName = "localFile_1.txt";
// upload(host, port, username, password, localFilePathName,
// remoteDirectory, remoteFileName);
download(host, port, username, password, remoteDirectory, remoteFileName, localDirectorys, localFileName);
long e = System.currentTimeMillis();
System.err.println("总耗时:" + (e - b) / 1000.0D + "秒");
}
private static class Sftp {
private static final Logger LOGGER = LoggerFactory.getLogger(Sftp.class);
private Session session;
private Channel channel;
private ChannelSftp sftp;
private Sftp() {
this.session = null;
this.channel = null;
this.sftp = null;
}
private void getConnect(String host, int port, String username, String password) throws Exception {
LOGGER.debug("开始创建sftp连接...");
JSch jsch = new JSch();
this.session = jsch.getSession(username, host, port);
this.session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
this.session.setConfig(config);
this.session.connect();
this.channel = this.session.openChannel("sftp");
this.channel.connect();
this.sftp = ((ChannelSftp) this.channel);
LOGGER.debug("创建sftp连接结束...");
}
private void upload(InputStream inputStream, String remoteDirectory, String remoteFileName) throws Exception {
this.sftp.cd("/");
try {
if ((!remoteDirectory.equals("")) && (remoteDirectory.trim() != "")) {
String[] dd = remoteDirectory.split("/");
for (String directory : dd) {
if (directory == null)
continue;
if ("".equals(directory.trim()))
continue;
try {
this.sftp.cd(directory);
} catch (SftpException sException) {
if (2 == sException.id) {
LOGGER.info("创建目录【{}】", new Object[] { directory });
this.sftp.mkdir(directory);
this.sftp.cd(directory);
}
}
}
}
this.sftp.put(inputStream, remoteFileName);
} catch (Exception e) {
throw new Exception(e.getMessage(), e);
}
}
private void download(String remoteDirectory, String remoteFileName, String localDirectorys,
String localFileName) throws Exception {
try {
this.sftp.cd(remoteDirectory);
File file = new File(localDirectorys);
if (!file.exists()) {
file.mkdirs();
}
this.sftp.get(remoteFileName, new FileOutputStream(new File(localDirectorys, localFileName)));
} catch (Exception e) {
} finally {
disconnect();
}
}
private void delete(String directory, String deleteFile) throws Exception {
try {
this.sftp.cd(directory);
this.sftp.rm(deleteFile);
} catch (Exception e) {
} finally {
disconnect();
}
}
private void disconnect() throws Exception {
if (this.sftp != null) {
this.sftp.disconnect();
this.sftp.exit();
this.sftp = null;
}
if (this.channel != null) {
this.channel.disconnect();
this.channel = null;
}
if (this.session != null) {
this.session.disconnect();
this.session = null;
}
}
}
}
SftpUtil FTP文件上传的更多相关文章
- Java实现FTP文件上传与下载
实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cl ...
- java/struts/Servlet文件下载与ftp文件上传下载
1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...
- FTP文件上传并支持断点续传(一)—— win10 本地环境 ftp站点构建
由于之前项目开发是采用是采用的FTP文件上传,就一直想学习,但由于FTP服务器是公司的,为了方便就像把本地变成ftp站点,其实很简单,但也有很多坑 这里简单介绍一下自己遇到的坑 一:开通本地的ftp权 ...
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- Java使用comms-net jar包完成ftp文件上传进度的检测功能
本文章只讲述大致的思路与本次功能对应的一些开发环境,具体实现请结合自己的开发情况,仅供参考,如果有不对的地方,欢迎大家指出! 准备环境:JDK1.7 OR 1.8.eclipse.ftp服务器(可自行 ...
- 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
在基于SqlSugar的开发框架的服务层中处理文件上传的时候,我们一般有两种处理方式,一种是常规的把文件存储在本地文件系统中,一种是通过FTP方式存储到指定的FTP服务器上.这种处理应该由程序进行配置 ...
- 【FTP】FTP文件上传下载-支持断点续传
Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...
- SecureCRT中的ftp文件上传
原文地址:http://www.blogbus.com/jjuan-flake-logs/59745331.html SecureCRT与SshClient不同的就是,SecureCRT没有图形化的文 ...
- FTP文件上传 支持断点续传 并 打印下载进度(二) —— 单线程实现
这个就看代码,哈哈哈哈哈 需要用到的jar包是: <dependency> <groupId>commons-net</groupId> <artifact ...
随机推荐
- 团队作业Beta冲刺--第二天
团队作业Beta冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 (1)掌握软件黑盒测试技术:(2)学会编制软件 ...
- test20190802 夏令营NOIP训练18
今天的题很有难度啊.然而我10:40才看题-- 高一学堂 在美丽的中山纪念中学里面,有一座高一学堂.所谓山不在高,有仙则名:水不在深,有龙则灵.高一学堂,因为有了yxr,就成了现在这个样子 = =. ...
- CH6401 创世纪
6401 创世纪 0x60「图论」例题 描述 上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i].现在,上帝要把它们中的 ...
- ubuntu14.04 部署nfs服务
安装nfs服务 apt-get install nfs-kernel-server 修改配置文件,共享目录为/var/www,*号可替换为客户端IP地址,*默认为任何部署了nfs客户端的IP可以挂载该 ...
- TAPD----设置新缺陷模板必填信息
进入设置的路径:设置-->应用设置-->缺陷-->显示设置-->创建页面模板-->点击某个模板
- drf框架 - JWT认证插件
JWT认证 JWT认证方式与其他认证方式对比: 优点 1) 服务器不要存储token,token交给每一个客户端自己存储,服务器压力小 2)服务器存储的是 签发和校验token 两段算法,签发认证的效 ...
- 0.0.Pycharm使用技巧
调整自动字体大小 Increase(字体变大) Decrease(字体变小) 背景颜色设置 pycharm 左侧菜单问题 解决 pycharm中配置启动Django项目 1.先打开mange.py,然 ...
- commons-dbutils工具栏的编写
db.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test_db?useUnicode=t ...
- SpringBoot官方文档学习(二)Externalized Configuration(外部化配置)
Spring Boot允许您将配置外部化,以便可以在不同的环境中使用相同的应用程序代码.您可以使用属性文件.YAML文件.环境变量和命令行参数来具体化配置.属性值可以通过使用@Value注释直接注入b ...
- SQL Server Default Trace查看是谁对数据库进行了DDL操作
在我们的工作中可能会遇到这样一种情形.由于数据库中某些对象被altered/created/deleted,造成我们的应用程序crash. 当我们把问题解决之后,老板可能会问发生了什么?为什么会这样? ...