博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SftpUtil FTP文件上传
阅读量:6655 次
发布时间:2019-06-25

本文共 5970 字,大约阅读时间需要 19 分钟。

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;
}
}
}
}

转载于:https://www.cnblogs.com/chinaifae/p/10304247.html

你可能感兴趣的文章
英国科学家研制出世界最小发动机,纳米机器人还远吗?
查看>>
Java 10 牵手 Docker,新特性完美解决服务器资源分配问题
查看>>
Uvaoj 11624 - Fire!
查看>>
垃圾收集算法一览
查看>>
Windows下,关于Oracle新建数据库之后,无法通过 / as sysdba 连接到orcl 问题
查看>>
【Jenkins】自定义Jenkins theme
查看>>
win32版unrealircd的编译
查看>>
在ABAP里实现条件断点的三种方式
查看>>
JAVA-1004. 成绩排名 (20)
查看>>
Serv-U服务器遇到问题-解决
查看>>
S/4HANA for Customer Management里的搜索分页处理
查看>>
Hadoop常见错误2
查看>>
RHEL 网卡的基本配置
查看>>
spring-boot整合Dubbo分布式架构案例
查看>>
DS4300 更换控制器电池 (一)
查看>>
elasticsearch 自定义打分
查看>>
Linux系统安装
查看>>
剖析ECMALL的登录机制
查看>>
通过MySQL二进制包多实例搭建
查看>>
springBoot(14):使用SQL关系型数据库-事务处理
查看>>