zabbix监控模块中Linux主机数据上传和下载的模拟环境测试(Java实现)

SftpUtil.java

package uoload;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Vector;

import org.apache.commons.io.IOUtils;

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



/**
 * Created by xianggongtao on 2018/5/12
 */
public class SftpUtil {

	//private transient Logger log = LoggerFactory.getLogger(this.getClass());

    public static String installFilePath = "/opt/yfjz";
    public static String toolServerIpAddr = "192.168.3.132";
    public static int serverPort = 22;

    public ChannelSftp sftp ;
    //private Session session = null;
    /** FTP 登录用户名*/
    private String username;
    /** FTP 登录密码*/
    private String password;
    /** 私钥 */
    private String privateKey;
    /** FTP 服务器地址IP地址*/
    private String host;
    /** FTP 端口*/
    private int port;
    //private Channel channel = null;
    /**  
      * 构造基于密码认证的sftp对象
      * @param username
      * @param password
      * @param host
      * @param port
      */
    public SftpUtil(String username, String password, String host, int port) {
        this.username = username;
        this.password = password;
        this.host = host;
        this.port = port;
    }
    /**  
          * 构造基于秘钥认证的sftp对象 
          * @param username
          * @param host 
          * @param port 
          * @param privateKey 
          */
    public SftpUtil(String username, String host, int port, String privateKey) {
        this.username = username;
        this.host = host;
        this.port = port;
        this.privateKey = privateKey;
    }

    public SftpUtil(){}

    /** 
     * 连接sftp服务器 
     *
     * @throws Exception
     */
    public ChannelSftp login(){
        try {  
            JSch jsch = new JSch();  
            /*if (privateKey != null) {  
                jsch.addIdentity(privateKey);// 设置私钥  
                //log.info("sftp connect,path of private key file:{}" , privateKey);  
            }*/ 
            //log.info("sftp connect by host:{} username:{}",host,username);  
    
            Session session = jsch.getSession(username, host, port);  
            //log.info("Session is build");  
            if (password != null) {  
                session.setPassword(password);    
            }  
            Properties config = new Properties();  
            config.put("StrictHostKeyChecking", "no");  
                
            session.setConfig(config);  
            session.connect();  
            //log.info("Session is connected");  
              
            Channel channel = session.openChannel("sftp");  
            channel.connect();  
            //log.info("channel is connected");  
    
            sftp = (ChannelSftp) channel;  
            //log.info(String.format("sftp server host:[%s] port:[%s] is connect successfull", host, port));  
            System.out.println("登录成功!!");
        } catch (JSchException e) {
        	e.printStackTrace();
            //log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{host, port, e.getMessage()});    
        }
		return sftp;  
    }    
                
    /**
      * 关闭连接 server
      */
    public void logout(ChannelSftp sftp){
        if (sftp != null) {  
            if (sftp.isConnected()) {  
                //sftp.disconnect(); 
                sftp.exit();
                //log.info("sftp is closed already");  
            }  
        } 
        /*if (channel != null) {  
            if (channel.isConnected()) {  
            	channel.disconnect();  
                //log.info("sshSession is closed already");  
            } 
        }		
        if (session != null) {  
            if (session.isConnected()) {  
                session.disconnect();
                //log.info("sshSession is closed already");  
            }  
        }*/
        System.out.println("退出登录成功!!");
    }  
                
    /**
      * 将输入流的数据上传到sftp作为文件
      *
      * @param directory
      *            上传到该目录
      * @param sftpFileName
      *            sftp端文件名
      * @param input
      *            输入流
      * @throws SftpException
      * @throws Exception
      */
    public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
        try {    
            sftp.cd(directory);  
        } catch (SftpException e) {  
            //log.warn("directory is not exist");  
            sftp.mkdir(directory);  
            sftp.cd(directory);  
        }  
        sftp.put(input, sftpFileName); 
        try {
			input.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        //log.info("file:{} is upload successful" , sftpFileName);  
    }  
                
    /**
      * 上传单个文件
      *
      * @param directory
      *            上传到sftp目录
      * @param uploadFile
      *            要上传的文件,包括路径
      * @throws FileNotFoundException
      * @throws SftpException
      * @throws Exception
      */
    public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
        File file = new File(uploadFile);  
        upload(directory, file.getName(), new FileInputStream(file));  
    }  
                
    /**
      * 将byte[]上传到sftp,作为文件。注意:从String生成byte[]是,要指定字符集。
      *
      * @param directory
      *            上传到sftp目录
      * @param sftpFileName
      *            文件在sftp端的命名
      * @param byteArr
      *            要上传的字节数组
      * @throws SftpException
      * @throws Exception
      */
    public void upload(String directory, String sftpFileName, byte[] byteArr) throws SftpException{
        upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));  
    }  
                
    /**
      * 将字符串按照指定的字符编码上传到sftp
      *
      * @param directory
      *            上传到sftp目录
      * @param sftpFileName
      *            文件在sftp端的命名
      * @param dataStr
      *            待上传的数据
      * @param charsetName
      *            sftp上的文件,按该字符编码保存
      * @throws UnsupportedEncodingException
      * @throws SftpException
      * @throws Exception
      */
    public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{
        upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));    
    }  
                
    /**
      * 下载文件
      *
      * @param directory
      *            下载目录
      * @param downloadFile
      *            下载的文件
      * @param saveFile
      *            存在本地的路径
      * @throws SftpException
      * @throws FileNotFoundException
      * @throws Exception
      */
    public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
        if (directory != null && !"".equals(directory)) {  
            sftp.cd(directory);  
        }  
        File file = new File(saveFile);  
        sftp.get(downloadFile, new FileOutputStream(file));  
        //log.info("file:{} is download successful" , downloadFile);  
    }  
    /**
      * 下载文件
      * @param directory 下载目录
      * @param downloadFile 下载的文件名
      * @return 字节数组
      * @throws SftpException
      * @throws IOException
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值