第一步:导入pom依赖
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
第二步:上述操作的工具类
import com.jcraft.jsch.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
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();
if (x.contains(".log")) {
String[] s1 = x.split(" ");
list.add(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;
}
public InputStream get(String filPath) throws SftpException {
return sftp.get(filPath);
}
public String getLastModifiedTime(String srcSftpFilePath) {
try {
SftpATTRS sftpATTRS = sftp.lstat(srcSftpFilePath);
int mTime = sftpATTRS.getMTime();
Date lastModified = new Date(mTime * 1000L);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return format.format(lastModified);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
使用
@Test
public void test2() throws SftpException, IOException {
String remoteAddr = "10.xzxx8";
String username = "xx";
String password = "x^xx";
String targetFolder = "/opt/hihonor/xxx";
SFTPUtil sftp = new SFTPUtil(username, password, remoteAddr, 22);
sftp.login();
List<String> objects = sftp.listFiles(targetFolder);
System.out.println(objects);
}