记录项目中使用的一些实用技术:
package com.util;
import com.jcraft.jsch.*;
import java.io.File;
import java.util.Properties;
public class SftpUtil {
/**
* 从SFTP服务器下载文件
*
* @param ftpHost SFTP IP地址
* @param ftpUserName SFTP 用户名
* @param ftpPassword SFTP用户名密码
* @param ftpPort SFTP端口
* @param ftpPath SFTP服务器中文件所在路径 格式: ftptest/aa
* @param localPath 下载到本地的位置 格式:H:/download
* @param fileName 文件名称
*/
public static boolean downloadSftpFile(String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort, String ftpPath, String localPath,
String fileName) {
//文件存在
boolean fileExist = true;
Session session = null;
Channel channel = null;
ChannelSftp chSftp = null;
try {
JSch jsch = new JSch();
session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
session.setTimeout(100000);
session.setPassword(ftpPassword);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig("kex", "diffie-hellman-group1-sha1");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
chSftp = (ChannelSftp) channel;
String ftpFilePath = ftpPath + fileName;
String localFilePath = localPath + fileName;
chSftp.get(ftpFilePath, localFilePath);
} catch (Exception e) {
e.printStackTrace();
fileExist = false;
} finally {
if (chSftp != null) {
chSftp.quit();
}
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
return fileExist;
}
/**
* 上传文件到SFTP服务器
*
* @param ftpHost SFTP IP地址
* @param ftpUserName SFTP 用户名
* @param ftpPassword SFTP用户名密码
* @param ftpPort SFTP端口
* @param sftpPath sftp上传路径
* @param localPath 本地文件所在路径
* @param fileName 本地文件名称
*/
public static boolean uploadSftpFile(String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort, String sftpPath, String localPath,
String fileName) {
boolean fileExist = true;
Session session = null;
Channel channel = null;
ChannelSftp chSftp = null;
try {
JSch jsch = new JSch();
session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
session.setPassword(ftpPassword);
session.setTimeout(100000);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
chSftp = (ChannelSftp) channel;
String ftpFilePath = sftpPath + File.separatorChar + fileName;
String localFilePath = localPath + File.separatorChar + fileName;
chSftp.put(localFilePath, ftpFilePath);
} catch (Exception e) {
e.printStackTrace();
fileExist = false;
} finally {
if (chSftp != null) {
chSftp.quit();
}
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
return fileExist;
}
/**
* 删除本地文件
*
* @param localPath 本地文件所在路径
*/
public static boolean deleteFile(String localPath) throws JSchException {
boolean fileExist = false;
try {
//根据路径创建文件对象
File file = new File(localPath);
//路径是个文件且不为空时删除文件
if (file.isFile() && file.exists()) {
//删除失败时,返回false
fileExist = file.delete();
}
} catch (Exception e) {
e.printStackTrace();
fileExist = false;
}
return fileExist;
}
}