java:工具(汉语转拼音,压缩包,EXCEL,JFrame窗口和文件选择器,SFTP上传下载,FTP工具类,SSH)

1.汉语转拼音:

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class Test {

    /** 
     * 将文字转为汉语拼音
     * @param chineselanguage 要转成拼音的中文
     */
    public static String toHanyuPinyin(String ChineseLanguage){
        char[] cl_chars = ChineseLanguage.trim().toCharArray();
        String hanyupinyin = "";
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部小写
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
        defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V) ;
        try {
            for (int i=0; i<cl_chars.length; i++){
                if (String.valueOf(cl_chars[i]).matches("[u4e00-u9fa5]+")){// 如果字符是中文,则将中文转为汉语拼音
                    hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0];
                } else {// 如果字符不是中文,则不转换
                    hanyupinyin += cl_chars[i];
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            System.out.println("字符不能转成汉语拼音");
        }
        return hanyupinyin;
    }
    
    /**
     * 首字母全大写
     * @param ChineseLanguage
     * @return
     */
    public static String getFirstLettersUp(String ChineseLanguage){
        return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.UPPERCASE);
    }
    /**
     * 首字母全小写
     * @param ChineseLanguage
     * @return
     */
    public static String getFirstLettersLo(String ChineseLanguage){
        return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.LOWERCASE);
    }
    
    public static String getFirstLetters(String ChineseLanguage,HanyuPinyinCaseType caseType) {
        char[] cl_chars = ChineseLanguage.trim().toCharArray();
        String hanyupinyin = "";
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(caseType);// 输出拼音全部大写
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
        try {
            for (int i = 0; i < cl_chars.length; i++) {
                String str = String.valueOf(cl_chars[i]);
                if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
                    hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1);
                } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
                    hanyupinyin += cl_chars[i];
                } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
                    hanyupinyin += cl_chars[i];
                } else {// 否则不转换
                    hanyupinyin += cl_chars[i];//如果是标点符号的话,带着
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            System.out.println("字符不能转成汉语拼音");
        }
        return hanyupinyin;
    }
    
   
    /**
     * 取第一个汉字的第一个字符
    * @Title: getFirstLetter 
    * @Description: TODO 
    * @return String   
    * @throws
     */
    public static String getFirstLetter(String ChineseLanguage){
        char[] cl_chars = ChineseLanguage.trim().toCharArray();
        String hanyupinyin = "";
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 输出拼音全部大写
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
        try {
            String str = String.valueOf(cl_chars[0]);
            if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
                hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(
                cl_chars[0], defaultFormat)[0].substring(0, 1);;
            } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
                hanyupinyin += cl_chars[0];
            } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母

                hanyupinyin += cl_chars[0];
            } else {// 否则不转换

            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            System.out.println("字符不能转成汉语拼音");
        }
        return hanyupinyin;
    }
    
    public static void main(String[] args) {
        
        System.out.println(getFirstLettersUp("测试"));
    }
}

2.压缩包

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 

 
public class ZIPUtil {
 
    
 
    /**s
     * 压缩文件
     * @param srcFilePath 压缩源路径
     * @param destFilePath 压缩目的路径
     */
    public static void compress(String srcFilePath, String destFilePath) {
        //
        File src = new File(srcFilePath);
 
        if (!src.exists()) {
            throw new RuntimeException(srcFilePath + "不存在");
        }
        File zipFile = new File(destFilePath);
 
        try {
 
            FileOutputStream fos = new FileOutputStream(zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);
            String baseDir = "";
            compressbyType(src, zos, baseDir);
            zos.close();
          
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
 
        }
    }
    /**
     * 按照原路径的类型就行压缩。文件路径直接把文件压缩,
     * @param src
     * @param zos
     * @param baseDir
     */
     private static void compressbyType(File src, ZipOutputStream zos,String baseDir) {
 
            if (!src.exists())
                return;
            //判断文件是否是文件,如果是文件调用compressFile方法,如果是路径,则调用compressDir方法;
            if (src.isFile()) {
                //src是文件,调用此方法
                compressFile(src, zos, baseDir);
                 
            } else if (src.isDirectory()) {
                //src是文件夹,调用此方法
                compressDir(src, zos, baseDir);
 
            }
 
        }
      
        /**
         * 压缩文件
        */
        private static void compressFile(File file, ZipOutputStream zos,String baseDir) {
            if (!file.exists())
                return;
            try {
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                ZipEntry entry = new ZipEntry(baseDir + file.getName());
                zos.putNextEntry(entry);
                int count;
                byte[] buf = new byte[1024];
                while ((count = bis.read(buf)) != -1) {
                    zos.write(buf, 0, count);
                }
                bis.close();
 
            } catch (Exception e) {
              // TODO: handle exception
 
            }
        }
         
        /**
         * 压缩文件夹
         */
        private static void compressDir(File dir, ZipOutputStream zos,String baseDir) {
            if (!dir.exists())
                return;
            File[] files = dir.listFiles();
            if(files.length == 0){
                try {
                    zos.putNextEntry(new ZipEntry(baseDir + dir.getName()+File.separator));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            for (File file : files) {
                compressbyType(file, zos, baseDir + dir.getName() + File.separator);
            }
    }
        
        public static void test(){
            String path = "C:\Users\dell\Desktop\统计表\转换模板_20181031\模板_20181101\财务模板_20181202";
            File f = new File(path);
            File [] file = f.listFiles();
            for (int i = 0; i < file.length; i++) {
                String sourceFile = path+"/"+file[i].getName();
                String targetFile = "";
                targetFile = sourceFile+".zip";
                compress(sourceFile,targetFile);
            }
            System.out.println("完成");
        }
        /**
         * @param args 主方法
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //第一个参数是需要压缩的源路径;第二个参数是压缩文件的目的路径,这边需要将压缩的文件名字加上去
//            compress("Q:/bbbb/123.txt","Q:/bbbb/ceshi.zip");
            test();
        
        }
}

 3.EXCEL

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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;
import org.springframework.web.multipart.MultipartFile;

public class ExcelUtil {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class);
    
     //判断是否是2003的excel 
    public static boolean isExcel2003(String filePath)  {  
         return filePath.matches("^.+\.(?i)(xls)$");  
     }  
   
    //判断是否是2007的excel
    public static boolean isExcel2007(String filePath)  {  
         return filePath.matches("^.+\.(?i)(xlsx)$");  
     }  
    
    public static List<Object> readExcel(MultipartFile mfile) throws Exception{
        List<Object> list = new ArrayList<Object>();
        Workbook wb = null;
        String fileName = mfile.getOriginalFilename();
        boolean isExcel2003 = ExcelUtil.isExcel2003(fileName);
        boolean isExcel2007 = ExcelUtil.isExcel2007(fileName);
        ArrayList<String> columns = new ArrayList<String>();
        ArrayList<String> datas = new ArrayList<String>();
        Integer columnsCount = 0;
        if (isExcel2003) {
            wb = new HSSFWorkbook(mfile.getInputStream());
        } else if (isExcel2007) {
            wb = new XSSFWorkbook(mfile.getInputStream());
        } else {
            throw new Exception("该类型文件不是excel");
        }
        Sheet sheet = null;
        // 获取第一个sheet表
        sheet = wb.getSheetAt(0);
        int rowCount = sheet.getLastRowNum();
        int cellCount = sheet.getRow(0).getLastCellNum();
        for (int j = 0; j < rowCount + 1; j++) {
            Row row = sheet.getRow(j);
            if (row != null) {
                for (int k = 0; k < cellCount; k++) {
                    if(row.getCell(k)!=null){
                        row.getCell(k).setCellType(Cell.CELL_TYPE_STRING);
                    }
                    //需要去除空格
                    String value = (row.getCell(k)+"").trim();
                    if(!StringUtils.isBlank(value)){
                        value = value.trim();
                    }
                    if (j == 0) {
                        columns.add("[" + value + "]");
                        columnsCount++;
                    } else {
                        datas.add("'" + value + "'");

                    }
                }
            }
        }
        list.add(datas);
        list.add(columns);
        list.add(columnsCount);
        return list;
    }
}

 4.JFrame窗口和文件选择器

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import org.apache.commons.lang.StringUtils;

import com.zskj.etl.util.dbmanager.impl.SqlServerDBManager;

import pojo.DBServer;

@SuppressWarnings("serial")
public class RestoreAccess extends JFrame implements ActionListener {
    static JButton open = null;
    static JFrame frame = null;
    static boolean Flag = false;
    static String errorInfo = "";
    static DBServer dbServer = new DBServer();

    public static void main(String[] args) {
        shows();
        String s = "";
    }

    public static void shows() {
        // 创建文件选择器
        RestoreAccess fileChooser = new RestoreAccess();
        frame = new JFrame();
        frame.setTitle("还原Access文件");
        frame.setDefaultCloseOperation(3); // 发起close时默认执行操作(读者可自行百度)
        frame.setSize(380, 200);
        frame.setLocationRelativeTo(null); // 设置窗体显示在居中位置
        frame.setResizable(false);
        frame.setLayout(new FlowLayout());

        // 创建标签
        JLabel L1 = new JLabel("数据库名称 :");
        JTextField DBName = new JTextField(20);

        JLabel L2 = new JLabel("   数据库 IP :");
        JTextField IP = new JTextField(20);

        JLabel L3 = new JLabel("       数据库账号 :");
        JTextField user = new JTextField(20);

        JLabel L4 = new JLabel("       数据库密码 :");
        JTextField pwd = new JTextField(20);

        open = new JButton("选择要还原的Access文件");
        fileChooser.add(open);
        //button按钮是否单独显示
//        fileChooser.setVisible(true);
        fileChooser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        open.addActionListener(fileChooser);

        // 添加标签
        
        frame.add(L2);
        frame.add(IP);
        frame.add(L1);
        frame.add(DBName);
        frame.add(L3);
        frame.add(user);
        frame.add(L4);
        frame.add(pwd);
        frame.add(open);
        frame.setVisible(true);

        ButtonListener bl = new ButtonListener(DBName, IP, user, pwd);
        open.addActionListener(bl);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        JFileChooser jfc = new JFileChooser();
        jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        jfc.showDialog(new JLabel(), "选择");
        File file = jfc.getSelectedFile();
        if (file.isDirectory()) {
            System.out.println("文件夹:" + file.getAbsolutePath());
        } else if (file.isFile()) {
            System.out.println("文件:" + file.getAbsolutePath());
            System.out.println("name:" + dbServer.getDBName());
            System.out.println("IP:" + dbServer.getIP());
            System.out.println("pwd:" + dbServer.getPwd());
            System.out.println("user:" + dbServer.getUser());
            try {
                //还原ACCESS功能
                SqlServerDBManager sqlServerDBManager = new SqlServerDBManager(dbServer.getIP(), dbServer.getUser(),
                        dbServer.getPwd(), "1433", dbServer.getDBName());
                JackcessUtil.importDataToSqlServer(sqlServerDBManager, file.getAbsolutePath());
                Flag = true;
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                errorInfo = e1.getMessage();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                errorInfo = e1.getMessage();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                errorInfo = e1.getMessage();
            }finally{
                if(Flag == true){
                    JOptionPane.showMessageDialog(null, "还原成功!");
                    errorInfo = "";
                }else{
                    if(!StringUtils.isBlank(errorInfo)){
                        JOptionPane.showMessageDialog(null, errorInfo);
                    }else{
                        JOptionPane.showMessageDialog(null, "该文件不是Access文件");
                    }
                    errorInfo = "";
                    
                }
                
            }

        }
        System.out.println(jfc.getSelectedFile().getName());

    }

    // 自己定义一个类来实现接口
    public static class ButtonListener implements java.awt.event.ActionListener { // 实现ActionListener
        public JTextField DBName = new JTextField(); // 传参
        public JTextField IP = new JTextField();
        public JTextField user = new JTextField();
        public JTextField pwd = new JTextField();

        // public Huaban hua=new Huaban(); //一个画板对象
        public ButtonListener(JTextField DBName, JTextField IP, JTextField user, JTextField pwd) {// 重载
            this.DBName = DBName; // 窗体上的账号框,密码框传到监听上来
            this.IP = IP;
            this.pwd = pwd;
            this.user = user;

        }

        public ButtonListener() {

        }

        public void actionPerformed(ActionEvent e) { // 捕获点击动作
            dbServer.setUser(user.getText());
            dbServer.setIP(IP.getText());
            dbServer.setPwd(pwd.getText());
            dbServer.setDBName(DBName.getText());
        }

    }

}

 5.SFTP上传下载

  首先安装Freesshd,配置账号密码和路径

       

  
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Vector;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

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.SftpATTRS;
import com.jcraft.jsch.SftpException;  
  
/** 
 * SFTP帮助类 
 * 
 */  
public class SFTPUtil {  
      
    private static Log log = LogFactory.getLog(SFTPUtil.class);  
      
    public static void main(String[] args) {
        ChannelSftp sftp = null;  
        Session session = null;  
        try {  
            session = SFTPUtil.connect("100.80.10.36", 22, "tt", "123456");  
            Channel channel = session.openChannel("sftp");  
            channel.connect();  
            sftp = (ChannelSftp) channel;  
//            SFTPUtil.upload("kkkk","D:/otherFiles/1.bat", sftp);  
            SFTPUtil.download("kkkk","qqq.txt","D:\otherFiles\sss\", sftp);
            System.out.println("已完成");
        } catch (Exception e) {  
            e.printStackTrace();  
            log.debug(e);  
        }finally{  
            if(sftp != null)sftp.disconnect();  
            if(session != null)session.disconnect();  
        }  
    }
    
    /** 
     * 连接sftp服务器 
     * @param host 远程主机ip地址 
     * @param port sftp连接端口,null 时为默认端口 
     * @param user 用户名 
     * @param password 密码 
     * @return 
     * @throws JSchException  
     */  
    public static Session connect(String host, Integer port, String user, String password) throws JSchException{  
        Session session = null;  
        try {  
            JSch jsch = new JSch();  
            if(port != null){  
                session = jsch.getSession(user, host, port.intValue());  
            }else{  
                session = jsch.getSession(user, host);  
            }  
            session.setPassword(password);  
            //设置第一次登陆的时候提示,可选值:(ask | yes | no)  
            session.setConfig("StrictHostKeyChecking", "no");  
            //30秒连接超时  
            session.connect(30000);
        } catch (JSchException e) {  
            e.printStackTrace();  
            System.out.println("SFTPUitl 获取连接发生错误");  
            throw e;  
        }  
        return session;  
    }  
      
    /**
     *  
     * @param directory 相对目标路径 ,只能处理一层
     * @param uploadFile 上传文件路径
     * @param sftp
     * @throws Exception
     */
    public static void upload(String directory, String uploadFile, ChannelSftp sftp) throws Exception{
        System.out.println("sftp upload file [directory] : "+ directory);  
        System.out.println("sftp upload file [uploadFile] : "+ uploadFile);  
        File file = new File(uploadFile);  
        if(file.exists()){
            isExistFolder(directory, sftp);
            //必须进入才能创建
            sftp.cd(directory);
            if(file.isFile()){  
                InputStream ins = new FileInputStream(file); 
                //中文名称的  
                sftp.put(ins, new String(file.getName().getBytes(),"UTF-8"));  
            }
          
        }  
    }  
      
    /**
     * 判断文件夹是否存在不存在就创建,只处理一层
     * @param directory
     * @param uploadFile
     * @param sftp
     */
    public static boolean isExistFolder(String directory,ChannelSftp sftp){
        boolean flag = false;
        try {
            // 判断子目录文件夹是否存在,不存在即创建
            SftpATTRS attrs = null;
            try {
                attrs = sftp.stat(directory);
            } catch (Exception e) {
                // TODO: handle exception
            }
            if (attrs == null) {
                sftp.mkdir(directory);
                log.info("创建子目录:" + directory);
            }else{
                flag = true;
            }
        } catch (SftpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return flag;
    }
    
    /**
     * 
     * @param srcDirectory 源路径,相对路径
     * @param srcFileName 源文件名称
     * @param savePath 保存路径
     * @param sftp 
     * @throws UnsupportedEncodingException
     */
    public static void download(String srcDirectory,String srcFileName, String savePath, ChannelSftp sftp) throws UnsupportedEncodingException {  
        Vector v = null;
        String temp = "";
        File sp = new File(savePath);
        boolean flag = false;
        try {
            v = sftp.ls(srcDirectory);
            flag = isExistFolder(srcDirectory, sftp);
            if(flag == true){
                sftp.cd(srcDirectory);
            }
            if(!sp.exists()){
                sp.mkdirs();
            }
            for (Object object : v) {
                temp = object.toString();
                temp = temp.substring(temp.lastIndexOf(" ")+1);
                if(temp.equals(srcFileName)){
                    sftp.get(srcFileName,savePath+File.separator+srcFileName);
                }
            }
        } catch (SftpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }  
}  

6.FTP工具类

package com.zskj.pd.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.zskj.pd.pojo.FtpEntity;

public class ftpUtil {
    
    private final static Logger LOG = LoggerFactory.getLogger(ftpUtil.class);
    
    public static void main(String args[]) {
        FtpEntity m = new FtpEntity("100.80.10.38", 21, "test", "test");
        FTPClient fTPClient = login(m);
        uploadFile(fTPClient, "6666666666", "doc", "2.bat", "D:\otherFiles");
        
    }    

    
    
     //验证登录
         public static FTPClient login(FtpEntity ftpEntity) {
             FTPClient ftp = null;
             try {
                 ftp = new FTPClient();
                 ftp.connect(ftpEntity.getIp(), ftpEntity.getPort());
                 ftp.login(ftpEntity.getName(), ftpEntity.getPwd());
                 ftp.setCharset(Charset.forName("UTF-8"));
                 ftp.setControlEncoding("UTF-8");
                 LOG.info(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+" 登录成功");
             } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             }
             return ftp;
         }

        // 获取ftp某一文件(路径)下的文件名字,用于查看文件列表
        public static void getFilesName(FTPClient fTPClient) {
            try {
                // 获取ftp里面,“Windows”文件夹里面的文件名字,存入数组中
                FTPFile[] files = fTPClient.listFiles("/Windows");
                // 打印出ftp里面,“Windows”文件夹里面的文件名字
                for (int i = 0; i < files.length; i++) {
                    System.out.println(files[i].getName());
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        /**
         * 
         * @param targetFileName
         * @param targetPath
         * @param sourceFileName
         * @param sourcePath
         */
        public static void uploadFile(FTPClient fTPClient,String targetFileName,String targetPath,String sourceFileName,String sourcePath) {
            try {
                File sfp = new File(sourcePath+"\"+sourceFileName);
                fTPClient.storeFile(targetPath+"\"+targetFileName, new FileInputStream(sfp));
                LOG.info(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+" 上传完成");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        /**
         * 
         * @param targetFileName
         * @param targetPath
         * @param sourceFileName
         * @param sourcePath
         */
        public static void uploadFile2(FTPClient fTPClient,String targetFileName,String targetPath,String sourceFileName,String sourcePath) {
            OutputStream os = null;
            FileInputStream fis = null;
            try {
                os = fTPClient.storeFileStream(targetPath+"\"+targetFileName);
                fis = new FileInputStream(new File(sourcePath+"\"+sourceFileName));
                byte[] b = new byte[1024];
                int len = 0;
                while ((len = fis.read(b)) != -1) {
                    os.write(b, 0, len);
                }
                os.flush();
                LOG.info(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+" 上传完成");
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    fis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        /**
         * 
         * @param targetFileName
         * @param targetPath
         * @param sourceFileName
         * @param sourcePath
         */
        public static void downloadFile(FTPClient fTPClient,String targetFileName,String targetPath,String sourceFileName,String sourcePath) {
            try {
                // 将ftp根目录下的"jsoup-1.10.2.jar"文件下载到本地目录文件夹下面,并重命名为"1.jar"
                fTPClient.retrieveFile(sourcePath+"\"+sourceFileName, new FileOutputStream(new File(targetPath+"\"+targetFileName)));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        /**
         * 
         * @param targetFileName
         * @param targetPath
         * @param sourceFileName
         * @param sourcePath
         */
        public static void downloadFile2(FTPClient fTPClient,String targetFileName,String targetPath,String sourceFileName,String sourcePath) {
            InputStream is = null;
            FileOutputStream fos = null;
            try {
                is = fTPClient.retrieveFileStream(sourcePath+"\"+sourceFileName);
                fos = new FileOutputStream(new File(targetPath+"\"+targetFileName));
                byte[] b = new byte[1024];
                int len = 0;
                while ((len = is.read(b)) != -1) {
                    fos.write(b, 0, len);
                }
                fos.flush();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

}

 

7.SSH

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.concurrent.TimeUnit;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.StreamGobbler;

public class SSHSUtil {

    private Channel channel;
    private Session session = null;
    private int timeout = 60000;

    /*
     * 例如启动tomcat 可以写成绝对路径 /usr/apache-tomcat-7.0.47/bin/startup.sh
 还可以写成这样 cd
     * /usr/apache-tomcat-7.0.47/bin/
./startup.sh
 相当于在命令行里先 cd
     * /usr/apache-tomcat-7.0.47/bin 回车进入到tomcat的bin目录。
     * 然后在通过./startup.sh启动tomcat 这里的
就相当于回车了。
     */
    public static void main(final String[] args) throws Exception {

        // shutdown.sh
        // SSHSUtil sshUtil = new SSHSUtil("100.80.10.38", "tt", "123456");
        // String res = sshUtil.runShell("cmd /k start D:\kkkk\1.bat",
        // "utf-8");
        // System.out.println(res);
        // sshUtil.close();
        test();
        // runbat();

    }

    public static void runbat() {
        String cmd = "cmd /k start D:\otherFiles\1.bat";// pass
        try {
            Process ps = Runtime.getRuntime().exec(cmd);
            InputStream in = ps.getInputStream();
            int c;
            while ((c = in.read()) != -1) {
                System.out.print(c);// 如果你不需要看输出,这行可以注销掉
                break;
            }
            in.close();
            ps.destroy();
            // ps.waitFor();

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        // catch (InterruptedException e) {
        // // TODO Auto-generated catch block
        // e.printStackTrace();
        // }
        System.out.println("child thread donn");
    }

    public static void test() {
        String hostname = "192.168.11.2";
        String username = "a";
        String password = "123456";
        try {
            // 建立连接
            Connection conn = new Connection(hostname);
            // System.out.println("set up connections");
            conn.connect();
            // 利用用户名和密码进行授权
            boolean isAuthenticated = conn.authenticateWithPassword(username, password);
            if (isAuthenticated == false) {
                // System.out.println("--------");
                throw new IOException("Authorication failed");
            }
            // 打开会话
            ch.ethz.ssh2.Session sess = conn.openSession();
             System.out.println("cmd----");
//             执行命令
            sess.execCommand("start D:\otherFiles\1.bat");
             System.out.println("The execute command output is:");
            InputStream stdout = new StreamGobbler(sess.getStdout());
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
            while (true) {
                String line = br.readLine();
                if (line == null)
                    break;
                System.out.println(line);
            }
            // System.out.println("Exit code "+sess.getExitStatus());
            sess.close();
            conn.close();
            // System.out.println("Connection closed");

        } catch (IOException e) {
            System.out.println("can not access the remote machine");
        }
    }

    public SSHSUtil(final String ipAddress, final String username, final String password) throws Exception {
        JSch jsch = new JSch();
        this.session = jsch.getSession(username, ipAddress, 22);
        this.session.setPassword(password);
        this.session.setConfig("StrictHostKeyChecking", "no");
        this.session.setTimeout(this.timeout);
        this.session.connect();
        this.channel = this.session.openChannel("shell");
        this.channel.connect(1000);
    }

    public String runShell(String cmd, String charset) throws Exception {
        String temp = null;
        InputStream instream = null;
        OutputStream outstream = null;
        try {
            instream = this.channel.getInputStream();
            outstream = this.channel.getOutputStream();
            outstream.write(cmd.getBytes());
            outstream.flush();
            TimeUnit.SECONDS.sleep(2);
            if (instream.available() > 0) {
                byte[] data = new byte[instream.available()];
                int nLen = instream.read(data);

                if (nLen < 0) {
                    throw new Exception("network error.");
                }
                temp = new String(data, 0, nLen, "UTF-8");
            }
        } finally {
            outstream.close();
            instream.close();
        }
        return temp;
    }

    public void close() {
        this.channel.disconnect();
        this.session.disconnect();
    }
}
原文地址:https://www.cnblogs.com/kuangzhisen/p/9479750.html