导入pom依赖
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
工具类
import com.jcraft.jsch.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
public class SFTPUtil {
private ChannelSftp sftp;
private Session session;
private String username;
private String password;
private String privateKey;
private String host;
private int port;
public SFTPUtil(String username, String password, String host, int port) {
this.username = username;
this.password = password;
this.host = host;
this.port = port;
}
public SFTPUtil(String username, String host, int port, String privateKey) {
this.username = username;
this.host = host;
this.port = port;
this.privateKey = privateKey;
}
public SFTPUtil() { }
public void login() {
try {
JSch jsch = new JSch();
if (privateKey != null) {
jsch.addIdentity(privateKey);
}
session = jsch.getSession(username, host, port);
if (password != null) {
session.setPassword(password);
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
} catch (JSchException e) {
e.printStackTrace();
}
}
public void logout() {
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
}
}
if (session != null) {
if (session.isConnected()) {
session.disconnect();
}
}
}
public boolean upload(String directory, String sftpFileName, InputStream input) throws SftpException {
try {
if (directory != null && !"".equals(directory)) {
sftp.cd(directory);
}
sftp.put(input, sftpFileName);
return true;
} catch (SftpException e) {
return false;
}
}
public void cd(String directory) throws SftpException {
if (directory != null && !"".equals(directory) && !"/".equals(directory)) {
sftp.cd(directory);
}
}
public void download(String directory, String downloadFile, String saveFile) {
System.out.println("download:" + directory + " downloadFile:" + downloadFile + " saveFile:" + saveFile);
File file = null;
try {
if (directory != null && !"".equals(directory)) {
sftp.cd(directory);
}
file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (SftpException | FileNotFoundException e) {
e.printStackTrace();
if (file != null) {
file.delete();
}
}
}
public void delete(String directory, String deleteFile) throws SftpException {
if (directory != null && !"".equals(directory)) {
sftp.cd(directory);
}
sftp.rm(deleteFile);
}
public List<String> listFiles(String directory) throws SftpException {
Vector<?> objects = sftp.ls(directory);
List<String> list = new ArrayList<>();
for (Object s : objects){
String x = s.toString();
String[] s1 = x.split(" ");
System.out.println(s1[s1.length -1]);
}
return list;
}
public boolean isExistsFile(String directory, String fileName) {
List<String> findFileList = new ArrayList<>();
ChannelSftp.LsEntrySelector selector = lsEntry -> {
if (lsEntry.getFilename().equals(fileName)) {
findFileList.add(fileName);
}
return 0;
};
try {
sftp.ls(directory, selector);
} catch (SftpException e) {
e.printStackTrace();
}
return findFileList.size() > 0;
}
}