FtpsTools.java 10.7 KB
package com.ectrip.cyt.utils;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

/**
 * Created by dc on 2018/5/14.
 */

public class FtpsTools {
    private final static String TAG = FtpsTools.class.getSimpleName();
    /**
     * 连接sftp服务器
     *
     * @param host     主机
     * @param port     端口
     * @param username 用户名
     * @param password 密码
     * @return
     */
    public ChannelSftp connect(String host, int port, String username, String password) {

        ChannelSftp sftp = null;
        try {
            JSch jsch = new JSch();
            jsch.getSession(username, host, port);
            Session sshSession = jsch.getSession(username, host, port);
            LogUtil.d("FTP", "FTP创建Session");
            sshSession.setPassword(password);
            Properties sshConfig = new Properties();
            sshConfig.put("StrictHostKeyChecking", "no");
            sshSession.setConfig(sshConfig);
            sshSession.connect(5000);
            LogUtil.d("FTP", "FTP创建连接");
            Channel channel = sshSession.openChannel("sftp");
            channel.connect();
            sftp = (ChannelSftp) channel;
            LogUtil.d("FTP", "FTP连接成功");
        } catch (Exception e) {
            LogUtil.d("FTP", "FTP连接失败-" + LogUtil.getExMsg(e));
        }
        return sftp;
    }

    /**
     * 上传文件
     *
     * @param directory  上传的目录
     * @param uploadFile 要上传的文件
     * @param sftp
     */
    public void upload(String directory, String uploadFile, ChannelSftp sftp, String mac) {

        try {
            sftp.cd(directory);
            File file = new File(uploadFile);
            if (file.isFile()) {
//                String filename = mac + ".log"; //文件名为当前时间来保存
                sftp.put(new FileInputStream(file), file.getName());
                LogUtil.i("FtpsTools", "上传成功!");
            }
        } catch (Exception e) {
            LogUtil.d("FTP", "FTP上传失败-" + LogUtil.getExMsg(e));
        }
    }

    /**
     * 下载文件
     *
     * @param directory    下载目录
     * @param downloadFile 下载的文件
     * @param saveFile     存在本地的路径
     * @param sftp
     */
    public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {

        try {
            sftp.cd(directory);
            File file = new File(saveFile);
            sftp.get(downloadFile, new FileOutputStream(file));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除文件
     *
     * @param directory  要删除文件所在目录
     * @param deleteFile 要删除的文件
     * @param sftp
     */
    public void delete(String directory, String deleteFile, ChannelSftp sftp) {

        try {
            sftp.cd(directory);
            sftp.rm(deleteFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 列出目录下的文件
     *
     * @param directory 要列出的目录
     * @param sftp
     * @return
     * @throws SftpException
     */
    public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {

        return sftp.ls(directory);

    }

    //上传多个文件
    public static void Sftp_server_multiple(List<String> files, String host, String username, String password, String mac, int port) {

        FtpsTools sf = new FtpsTools();
        String directory = "/home/ectrip/";
        String logPath = "EctripCYTLog";
        String logPathDate = DateUtils.getCurrentDate();
        ChannelSftp sftp = sf.connect(host, port, username, password);
        // 判断子目录文件夹是否存在,不存在即创建
        SftpATTRS attrs = null;
        try {
            sftp.cd(directory);
            attrs = sftp.stat(logPath);
        } catch (Exception e) {
            LogUtil.e("FTP", "FTP连接目录失败1-" + LogUtil.getExMsg(e));
        }
        try {
            LogUtil.i("FTP", "attrs 1 == " + attrs);
            if (attrs == null) {
                sftp.mkdir(logPath); //创建目录
                LogUtil.d("FTP", "FTP创建目录成功");
            } else {
                LogUtil.d("FTP", "已存在目录");
            }
        } catch (Exception e) {
            LogUtil.e("FTP", "FTP创建目录失败-" + LogUtil.getExMsg(e));
        }

        try {
            attrs = null;
            sftp.cd(logPath);
            attrs = sftp.stat(mac);
        } catch (Exception e) {
            LogUtil.d("FTP", "FTP连接目录失败2-" + LogUtil.getExMsg(e));
        }

        try {
            LogUtil.i("FTP", "attrs 2 == " + attrs);
            if (attrs == null) {
                sftp.mkdir(mac); //创建目录
                LogUtil.d("FTP", "FTP创建mac地址目录成功");
            } else {
                LogUtil.d("FTP", "已存在mac地址目录");
            }
        } catch (Exception e) {
            LogUtil.e("FTP", "FTP创建mac地址目录失败-" + LogUtil.getExMsg(e));
        }

        try {
            attrs = null;
            sftp.cd(mac);
            attrs = sftp.stat(logPathDate);
        } catch (Exception e) {
            LogUtil.d("FTP", "FTP连接目录失败2-" + LogUtil.getExMsg(e));
        }

        try {
            LogUtil.i("FTP", "attrs 3 == " + attrs);
            if (attrs == null) {
                sftp.mkdir(logPathDate); //创建目录
                LogUtil.d("FTP", "FTP创建日期目录成功");
            } else {
                LogUtil.d("FTP", "已存在日期目录");
            }
        } catch (Exception e) {
            LogUtil.e("FTP", "FTP创建日期目录失败-" + LogUtil.getExMsg(e));
        }

        directory = directory + logPath + File.separator + mac + File.separator +logPathDate;
        for (String file : files) {
            LogUtil.i("FTP","上传日志文件 :" + file);
            sf.upload(directory, file, sftp, mac);//上传文件到服务器
        }

    }

    //上传文件
    public static void Sftp_server(final String file, final String host, final String username, final String password, final String mac , final int port) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                FtpsTools sf = new FtpsTools();
                String directory = "/home/ectrip/";
                String logPath = "EctripTScreenLog";
                String uploadFile = file;
                ChannelSftp sftp = sf.connect(host, port, username, password);
                // 判断子目录文件夹是否存在,不存在即创建
                SftpATTRS attrs = null;
                try {
                    sftp.cd(directory);
                    attrs = sftp.stat(logPath);
                } catch (Exception e) {
                    LogUtil.d("FTP", "FTP创建目录失败-" + LogUtil.getExMsg(e));
                }
                try {
                    if (attrs == null) {
                        sftp.mkdir(logPath); //创建目录
                        LogUtil.d("FTP", "FTP创建目录成功");
                    } else {
                        LogUtil.d("FTP", "已存在目录");
                    }
                } catch (Exception e) {
                    LogUtil.d("FTP", "FTP创建目录失败-" + LogUtil.getExMsg(e));
                }
                directory = directory + logPath;
                sf.upload(directory, uploadFile, sftp, mac);//上传文件到服务器
            }
        }).start();
    }

    /**
     * 文件夹内文件的个数
     * @param folderPath
     * @return
     * create by honceh 2023/9/1
     */
    public static int countFilesInFolder(String folderPath) {
        File folder = new File(folderPath);
        if (folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                return files.length;
            }
        }
        return 0;
    }

//    /**
//     * 初始化ftp
//     */
//    public static void initFTP() {
//        String[] params = {"FTTP", "3721"};
//        String userId = DBUtils.queryData(ParameterContens.USER, null);
//        String password = DBUtils.queryData(ParameterContens.PWD, null);
//        Saleautoservice saleautoservice = new Saleautoservice();
//        saleautoservice.setMd5Str("");
//        saleautoservice.setUserId(userId);
//        saleautoservice.setPassword(password);
//        saleautoservice.setMethod(13);
//        saleautoservice.setParameters(params);
//        getFTPResult("saleautoservice", saleautoservice);
//    }
//
//    private static void getFTPResult(String method, Object data) {
//
//        APIService.getInstance().loadData(method, data, BaseSaleResponse.class, new OnResultListener<BaseSaleResponse>() {
//            @Override
//            public void onResult(BaseSaleResponse result) {
//                try {
//                    if (result.getCode().equals("200")) {
//                        ResultBean bean = JSON.parseObject(JSON.toJSONString(result.getData()), ResultBean.class);
//                        ShowResultBean.show(bean);
//                        //处理结果
//                        LogUtil.i(TAG, "000" + result.getMsg());
//                        String resultState = result.getMsg().toLowerCase();
//                        if (TextUtils.equals("success", resultState)) {
//                            LogUtil.i(TAG, "获取ftp服务器数据成功");
//                            DBUtils.insertData(ParameterContens.SET_FPT_HOST, bean.getResult(0, "pmva"));
//                            DBUtils.insertData(ParameterContens.SET_FPT_USETR, bean.getResult(0, "pmvc"));
//                            DBUtils.insertData(ParameterContens.SET_FPT_PASSWORD, bean.getResult(0, "pmvd"));
//                            DBUtils.insertData(ParameterContens.SET_FPT_PORT, bean.getResult(0, "pmvb"));
//
//                        } else {
//                            LogUtil.i(TAG, "获取ftp服务器数据失败");
//                        }
//                    }
//                } catch (Exception e) {
//                    LogUtil.i(TAG, "获取ftp服务器数据异常");
//                    LogUtil.d("ResultBean", LogUtil.getExMsg(e));
//                }
//            }
//
//            @Override
//            public void onCompleted() {
//
//            }
//
//            @Override
//            public void onError(String error) {
//                LogUtil.d("ResultBean", error);
//            }
//        });
//    }

}