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 ...
随机推荐
- vue中移动端自适应的postcss-plugin-px2rem插件
flexible 主要是用来响应式改变根元素的字体大小 安装命令 npm install lib-flexible --save 在main.js里面导入命令import 'lib-flexible' ...
- test20190725 夏令营测试11
50+80+90=220.(每题满分90) 砍树 小A在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一条长度为a[i]的竖线段.由于有的树过于高大,挡住了其他的树,使得另一 ...
- [BeiJing2010组队]次小生成树 Tree
1977: [BeiJing2010组队]次小生成树 Tree Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 5168 Solved: 1668[S ...
- redis 缓存问题,转载:https://www.cnblogs.com/liangsonghua/p/www_liangsonghua_me_22.html
缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且处于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义 ...
- nodejs查看本机hosts文件域名对应ip
const dns = require('dns') dns.lookup('domainName', function(err, result) { console.log(result) }) r ...
- Django --- 多对多关系创建,forms组件
目录 多对多三种创建方式 1.系统直接创建 2.自己手动创建 3.自己定义加与系统创建 forms组件 1. 如何使用forms组件 2. 使用forms组件校验数据 3. 使用forms组件渲染标签 ...
- oracle: jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111
https://www.cnblogs.com/mmlw/p/5808072.html org.mybatis.spring.MyBatisSystemException: nested except ...
- Longest Continuous Increasing Subsequence II
Description Given an integer matrix. Find the longest increasing continuous subsequence in this matr ...
- MySQL 索引原理以及慢查询优化
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...
- NOIP2013积木大赛 [贪心]
大意 自己查去... 说明 这道题正解是贪心,但标程里是有这样一句话的:把序列分成(a1,..ai)(ai+1,...aj)......(ak,...an)多个非递减序列.然后所有段中最大值的和减去除 ...