Java实现SFTP客户端

1、SFTP下载Excel并解析,调试代码

public InputStream downloadFileStream(String remotePath,
            String regexFileName) {
        InputStream fielInput = null;
        String requireRemoteFileName = "";
        try {
            Vector v = listFiles(remotePath);
            // sftp.cd(remotePath);
            if (v.size() > 0) {
                log.info("本次处理文件个数为fileSize={}", v.size());
                int matchFileMaxModifyTime = 0;
                Iterator it = v.iterator();
                while (it.hasNext()) {
                    LsEntry entry = (LsEntry) it.next();
                    String remoteFilename = entry.getFilename();
                    if (remoteFilename.contains(regexFileName)) {
                        SftpATTRS attrs = entry.getAttrs();
                        if (attrs.getSize() > 0) {
                            int mTime = attrs.getMTime();
                            if (matchFileMaxModifyTime <= mTime) {
                                matchFileMaxModifyTime = mTime;
                                requireRemoteFileName = remoteFilename;
                            }
                        }
                    }
                }
            }
            fielInput = sftp.get(remotePath + requireRemoteFileName);
            if (log.isInfoEnabled()) {
                log.info("DownloadFile:" + requireRemoteFileName
                        + " success from sftp.");
            }
            return fielInput;
        } catch (SftpException e) {
            log.error("downloadFileStream error:{}", e);
        } finally {

        }
        return fielInput;
    }
package sftp;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

import org.apache.log4j.PropertyConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import excel.ExcelUtils;

public class SFTPTest {
    private static Logger log = LoggerFactory.getLogger(SFTPUtils.class);

    public static void main(String[] args) {
        logInit();
        // sftpTest();
        sftpTest02();
    }
    private static void sftpTest02() {
        String remotePath = "/sftpremote/";
        SFTPUtils sftp = null;
        InputStream inputStream = null;
        try {
            sftp = new SFTPUtils("127.0.0.1", "admin01", "123");
            sftp.connect();
            // 下载
            inputStream = sftp.downloadFileStream(remotePath, "201905");
            if (null != inputStream) {
                ExcelUtils.getDataFromExcel(inputStream);
                inputStream.close();
            }
        } catch (Exception e) {
            log.error("download error:{}", e);
        } finally {
            log.info("sftp disconnect");
            sftp.disconnect();
        }
    }
    private static void sftpTest() {
        SFTPUtils sftp = null;
        // 本地存放地址,需要加最后的“\\”,才能下载到指定目录,否则是上一级目录
        String localPath = "E:\\book\\sftptest\\sftpdownload\\";
        // Sftp下载路径
        String remotePath = "/sftpremote/";
        try {
            sftp = new SFTPUtils("127.0.0.1", "admin01", "123");
            sftp.connect();
            // 下载
            sftp.downloadFile(remotePath, "test.txt", localPath,
                    "testLocal.txt");
        } catch (Exception e) {
            log.error("download error:{}", e);
        } finally {
            log.info("sftp disconnect");
            sftp.disconnect();
        }
    }
    public static void logInit() {
        Properties logProp = new Properties();
        try {
            FileInputStream logIn = new FileInputStream("log4j.properties");
            logProp.load(logIn);
            logIn.close();
            PropertyConfigurator.configure(logProp);
        } catch (Exception e) {
            log.error("logInit error:{}", e);
        }

    }

}
package excel;

import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ExcelUtils {
    private static Logger log = LoggerFactory.getLogger(ExcelUtils.class);

    public static void getDataFromExcel(InputStream inputStream) {
        Workbook wookbook = null;
        try {
            wookbook = new XSSFWorkbook(inputStream);

        } catch (IOException e) {
            e.printStackTrace();
        }
        // 得到一个工作表
        Sheet sheet = wookbook.getSheetAt(0);
        // 获得数据的总行数
        int totalRowNum = sheet.getLastRowNum();
        log.info("totalRowNum:{}", totalRowNum);
        // 获得所有数据
        for (int i = 2; i <= totalRowNum; i++) {
            // 不搞反射,直接获取数据
            // 获得第i行对象
            Row row = sheet.getRow(i);
            // 获得获得第i行第0列的 String类型对象
            Cell cell = row.getCell(0);
            String row01 = cell.getStringCellValue().toString();
            // 获得获得第i行第1列的 String类型对象
            cell = row.getCell(1);
            int row02 = (int) cell.getNumericCellValue();
            log.info("{} {}", row01, row02);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/6xiong/p/10854416.html
今日推荐