SFTP创建连接,创建目录,上传文件,关闭连接:
/**
* sftp连接
*/
public void connect(String username, String host, int port, String password) {
try {
if (sftp != null) {
log.info("sftp is not null");
}
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
log.info("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
log.info("Session connected.");
log.info("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
log.info("Connected to " + host + ".");
} catch (Exception e) {
throw new SystemException("连接:["+host+"]ftp服务器异常");
}
}
/**
* sftp断开连接
*/
public void disconnect() {
if (this.sftp != null) {
if (this.sftp.isConnected()) {
this.sftp.disconnect();
} else if (this.sftp.isClosed()) {
System.out.println("sftp is closed already");
}
}
}
/**
* 上传文件 流 本地文件路径 remotePath 服务器路径
*/
public void upload(File file, String remotName, String remotePath) {
try {
if (file.isFile()) {
String rpath = remotePath;
try {
createDir(rpath, sftp);
} catch (Exception e) {
throw new SystemException("创建路径失败:" + rpath);
}
sftp.cd(remotePath);
this.sftp.put(new FileInputStream(file), remotName);
}
} catch (FileNotFoundException e) {
throw new SystemException("上传文件没有找到");
} catch (SftpException e) {
throw new SystemException("上传ftp服务器错误");
}
}
/**
* 创建一个文件目录
*/
public void createDir(String createpath, ChannelSftp sftp) {
try {
if (isDirExist(createpath)) {
this.sftp.cd(createpath);
return;
}
String pathArry[] = createpath.split("/");
StringBuffer filePath = new StringBuffer("/");
for (String path : pathArry) {
if (path.equals("")) {
continue;
}
filePath.append(path + "/");
if (isDirExist(filePath.toString())) {
sftp.cd(filePath.toString());
} else {
sftp.mkdir(filePath.toString());
sftp.cd(filePath.toString());
}
}
this.sftp.cd(createpath);
} catch (SftpException e) {
throw new SystemException("创建路径错误:" + createpath);
}
}
/**
* 判断目录是否存在
*/
public boolean isDirExist(String directory) {
boolean isDirExistFlag = false;
try {
SftpATTRS sftpATTRS = sftp.lstat(directory);
isDirExistFlag = true;
return sftpATTRS.isDir();
} catch (Exception e) {
if (e.getMessage().toLowerCase().equals("no such file")) {
isDirExistFlag = false;
}
}
return isDirExistFlag;
}