SFTP获取文件夹内的文件名,文件大小,文件修改时间
使用SFTP协议获取服务上的指定路径的文件夹下的所有文件名,文件大小,文件的修改时时间等。
工具类
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.*;
import org.apache.commons.io.IOUtils;
import com.jcraft.jsch.ChannelSftp.LsEntry;
/**
* @program: yc-bigdata-web
* @description: SFTP协议读取文件夹下的内容
* @author: Mr.Black
* @create: 2021-01-20 10:55
**/
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 ChannelSftp getChannelSftp() {
return this.sftp;
}
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 ArrayList<String> listFiles(String dir) throws SftpException{
ArrayList<String> files = new ArrayList<String>();
sftp.cd(dir);
Vector<String> lss = sftp.ls("*");
for (int i = 0; i < lss.size(); i++) {
Object obj = lss.elementAt(i);
if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry) {
LsEntry entry = (LsEntry) obj;
if (true && !entry.getAttrs().isDir()) {
files.add(entry.getFilename());
}
if (true && entry.getAttrs().isDir()) {
if (!entry.getFilename().equals(".") && !entry.getFilename().equals("..")) {
files.add(entry.getFilename());
}
}
}
}
return files;
}
public void download(String fileName, String savedir) throws SftpException, IOException{
InputStream is = sftp.get(fileName);
FileOutputStream out = new FileOutputStream(new File(savedir + "\\" +fileName));
IOUtils.copy(is,out);
is.close();
out.close();
}
public void delete(String fileName) throws SftpException {
sftp.rm(fileName);
}
public long getFileSize(String srcSftpFilePath) {
long fileSize;//文件大于等于0则存在
try {
SftpATTRS sftpATTRS = sftp.lstat(srcSftpFilePath);
fileSize = sftpATTRS.getSize();
} catch (Exception e) {
fileSize = -1;//获取文件大小异常
if (e.getMessage().toLowerCase().equals("no such file")) {
fileSize = -2;//文件不存在
}
}
return fileSize;
}
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");
String time = format.format(lastModified);
return time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
方法的调用
SFTPUtil sftp = new SFTPUtil(username, pwd, ip, port);
sftp.login();
ArrayList<String> fileList = null;
try {
fileList = sftp.listFiles(path);
for (int i = 0; i < fileList.size(); i++) {
HashMap<String, Object> fileMessageMap = new HashMap<>();
String fileName = fileList.get(i);
//获取文件大小
long size = sftp.getFileSize(path + fileName);
String fileSize = FileSizeUtil.getPrintSize(size);
//获取文件后缀名
String fileDOC = fileName.substring(fileName.lastIndexOf(".") + 1);
//获取文件修改时间
String lastModifiedTime = sftp.getLastModifiedTime(path + fileName);
fileMessageMap.put("fileName", fileName);
fileMessageMap.put("fileSize", fileSize);
fileMessageMap.put("fileDOC",fileDOC);
fileMessageMap.put("lastModifiedTime",lastModifiedTime);
list.add(fileMessageMap);
}
sftp.logout();
} catch (SftpException e) {
e.printStackTrace();
}
return list;
}
return null;