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 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() { // @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); // } // }); // } }