shell java 执行

简介:   java shell 命令  /** * * @author baoyou E-mail:curiousby@163.com * @version 2016年11月2日 下午1:54:49 * desc: */ public class ShellPro...

 

java shell 命令 

/**
 * 
 * @author baoyou E-mail:curiousby@163.com
 * @version 2016年11月2日 下午1:54:49
 * desc:
 */
public class ShellProcess {

    private static ShellProcess instance;

    public static ShellProcess getInstance() {
        if (instance == null) {
            synchronized (ShellProcess.class) {
                if (instance == null) {
                    instance = new ShellProcess();
                }
            }
        }
        return instance;
    }

    /**
     * 执行相应shell脚本
     * @param args 执行脚本的参数,[0]path:shell脚本路径;[1~n]脚本入参
     * @return     返回码,0:成功  1:失败
     */
    public int runShell(String[] args) {
        int runRes = SystemGlobal.FAILED;
        try {
            Process process = Runtime.getRuntime().exec(args);//调用相应shell脚本
            new StreamGobbler(process.getInputStream(), StreamGobbler.INFO).start();
            new StreamGobbler(process.getErrorStream(), StreamGobbler.ERROR).start();
            runRes = process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return runRes;
    }

    /**
     * 执行相应shell命令
     * @param cmd 执行的命令
     * @return    返回码,0:成功  1:失败
     */
    public int runShell(String cmd) {
        return runShell(cmd);
    }

    /**
     * 自动根据运行时环境执行shell命令
     * @param args shell命令以空格分割后的list
     * @return     返回码,0:成功  1:失败
     */
    public int runShell(List<String> args) {
        int runRes = SystemGlobal.FAILED;
        try {
            ProcessBuilder pb = new ProcessBuilder(args);
            Process process = pb.start();
            new StreamGobbler(process.getInputStream(), StreamGobbler.INFO).start();
            new StreamGobbler(process.getErrorStream(), StreamGobbler.ERROR).start();
            runRes = process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return runRes;
    }

    /**
     * 执行shell命令,并获取返回结果
     * @param args shell命令以空格分割后的list
     * @return     执行shell命令后的返回结果(按行分割后的list),如果发生异常,返回空List
     */
    public List<String> runShellWithResult(List<String> args) {
        List<String> results = new ArrayList<String>();
        try {
            ProcessBuilder pb = new ProcessBuilder(args);
            Process process = pb.start();
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String data = null;
            while ((data = br.readLine()) != null) {
                results.add(data);
            }
            new StreamGobbler(process.getInputStream(), StreamGobbler.INFO).start();
            new StreamGobbler(process.getErrorStream(), StreamGobbler.ERROR).start();
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
            return new ArrayList<String>();
        }
        return results;
    }

}

 

 

 

package com.taskschedule.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;

/**
 * 
 * @author baoyou E-mail:curiousby@163.com
 * @version 2016年11月2日 下午1:54:57
 * desc:
 */
public class StreamGobbler extends Thread {
    private InputStream is;
    private int type;
    private static Logger logger = Logger.getLogger(StreamGobbler.class);

    public static final int INFO = 0;
    public static final int ERROR = 1;

    public StreamGobbler(InputStream is, int type) {
        this.is = is;
        this.type = type;
    }

    @Override
    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                if (type == INFO) {
                    logger.info(line);
                } else if (type == ERROR) {
                    logger.error(line);
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

目录
相关文章
|
4月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
84 0
|
4月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
197 0
|
3天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
1月前
|
Java 关系型数据库 MySQL
Java调用shell脚本实现数据库备份功能
本篇文章主要介绍怎样使用Java程序,执行服务器上的数据库备份Shell脚本进行MySQL数据库的备份功能。
|
5月前
|
Java Shell Linux
java执行脚本命令(shell脚本或cmd脚本)
java执行脚本命令(shell脚本或cmd脚本)
|
3月前
|
Java Shell 网络安全
java实现连接远程服务器,并可以执行shell命令
java实现连接远程服务器,并可以执行shell命令
55 2
|
4月前
|
关系型数据库 MySQL Java
Elasticsearch【问题记录 01】启动&停止服务的2类方法及 java.nio.file.AccessDeniedException: xx/pid 问题解决(含启停shell脚本)
Elasticsearch【问题记录 01】启动&停止服务的2类方法及 java.nio.file.AccessDeniedException: xx/pid 问题解决(含启停shell脚本)
71 0
|
9月前
|
搜索推荐 算法 Java
【算法】Shell排序的原理与Java实现
Shell排序,也称为希尔排序(Shell Sort),是一种改进的插入排序算法。它通过将待排序的数组分割成多个较小的子数组,对这些子数组进行插入排序,最后再对整个数组进行一次插入排序。希尔排序的核心思想是通过较大的间隔比较和交换元素,使得数组中的元素能够快速地朝最终位置前进,从而提高插入排序的效率。
66 0
|
11月前
|
分布式计算 Java Hadoop
Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
566 0
|
Java Shell Linux
Java中运行shell脚本
Java中运行shell脚本
194 0
Java中运行shell脚本