最近公司让用SFTP用来和远端进行交互,学习了;一段时间sftp,现在将代码干货献上,希望对大家能够有所帮助:
1. 在src/com/zkr/sftp(建议建立在src下)下建立sftp.properties文件:
sftp.host=127.0.0.1
sftp.port=22
sftp.username=zhen
sftp.password=12345
sftp.timeout=60000
sftp.privateKey
sftp.passphrase
2. 创建SFTPUtils类,完成上传、下载、删除功能:
package com.zkr.sftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream.GetField;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;
import com.enterprisedt.util.debug.Logger;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
public class SftpUtils {
private static final Logger log = Logger.getLogger(SftpUtils.class); // 用来记录日志
Session session = null;
String privateKey = null;
String passphrase = null;
String host = null; // sftp服务器的IP
String username = null; // 用户名
String password = null; // 密码
int timeout = 60000; // 超时时间
int port = 22; // 端口号
/**
* 在构造函数中读取配置文件
*/
public SftpUtils() {
File file = new File("src/com/zkr/sftp/sftp.properties");
InputStream in = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException e) {
log.error("异常:文件没有找到", e);
}
Properties prop = new Properties();
try {
prop.load(in);
} catch (IOException e) {
log.error("异常:加载配置文件失败", e);
}
// 读取配置文件信息
host = prop.getProperty("sftp.host");
port = Integer.parseInt(prop.getProperty("sftp.port"));
username = prop.getProperty("sftp.username");
password = prop.getProperty("sftp.password");
timeout = Integer.parseInt(prop.getProperty("sftp.timeout"));
privateKey = prop.getProperty("sftp.privateKey");
passphrase = prop.getProperty("sftp.passphrase");
log.info("try to connect to " + host + ",username:" + username
+ ",password:" + password + ",port:" + port);
}
/**
* 得到连接
*
* @return
*/
private ChannelSftp GetConnectSftp() {
JSch jsch = new JSch();
ChannelSftp channelSftp = null;
try {
if (privateKey != null && !"".equals(privateKey)) {
// 使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥
if (passphrase != null && "".equals(passphrase)) {
jsch.addIdentity(privateKey, passphrase);
} else {
jsch.addIdentity(privateKey);
}
}
session = jsch.getSession(username, host, port);
// 设置密码
if (password != null && !"".equals(password)) {
session.setPassword(password);
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");// do not verify host
// 为session对象设置properties
session.setConfig(config);