SftpUtil FTP文件上传
阅读原文时间:2023年07月11日阅读:1

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 localFilePathNameList, List remoteDirectoryList, List 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;
}
}
}
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章