SFTP获取文件夹内的文件名,文件大小,文件修改时间

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;
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值