`
umgsai
  • 浏览: 111925 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java进行shell操作

 
阅读更多
public class ShellUtil {
    private static final Logger logger = LoggerFactory.getLogger(ShellUtil.class);
    
    /**
     * 执行指定命令
     * @param command
     * @return
     */
    public static ShellResult execute(String command) {
        List<String> cmdComponents = Lists.newArrayList();
        cmdComponents.add("sh");
        cmdComponents.add("-c");
        cmdComponents.add(command);

        /**进程句柄*/
        ProcessBuilder processBuilder = new ProcessBuilder(cmdComponents);
        Process process;
        try {
            process = processBuilder.start();
            process.waitFor();
        } catch (IOException ex) {
            String cmdStartExceptionMsg = String.format("启动命令失败, command:%s, 原因:%s", command, ex.toString());
            logger.error(cmdStartExceptionMsg, ex);

            return ShellResult.buildFailResult(cmdStartExceptionMsg);
        } catch (InterruptedException ex) {
            String cmdIntExceptionMsg = String.format("命令执行被中断, command:%s, 原因:%s", command, ex.toString());
            logger.error(cmdIntExceptionMsg, ex);

            return ShellResult.buildFailResult(cmdIntExceptionMsg);
        }

        ShellResult runResult = readResult(process);
        if (!runResult.isSuccess()) {
            String resultReadError = String.format("命令执行结果读取失败, command:%s, 原因:%s",
                                                        command, runResult.getResultMessage());
            logger.error(resultReadError);
        }

        return runResult;
    }

    private static ShellResult readResult(Process process) {

        // 取得命令输出
        List<String> outStrList = readFromStream(process.getInputStream());
        if (outStrList == null) {
            return ShellResult.buildFailResult("读取命令标准输出发生异常");
        }

        // 取得命令错误
        List<String> errStrList = readFromStream(process.getErrorStream());
        if (errStrList == null) {
            return ShellResult.buildFailResult("读取命令标准错误发生异常");
        }

        return ShellResult.buildSuccessResult(process.exitValue(), outStrList, errStrList);
    }

    private static List<String> readFromStream(InputStream ins) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
        List<String> strList = Lists.newArrayList();
        try {
            String line = reader.readLine();
            while (line != null) {
                strList.add(line);
                line = reader.readLine();
            }
        } catch (IOException ex) {
            String readError = "读取命令执行结果时出现读取IO异常";
            logger.error(readError, ex);
            strList = null;
        } finally {
            try {
                reader.close();
            } catch (IOException ex) {
                String closeError = "读取命令执行结果时出现关闭IO异常";
                logger.error(closeError, ex);
                strList = null;
            }
        }
        return strList;
    }
}

 

@Data
public class ShellResult {
    private boolean success;
    private String resultMessage;
    private int exitValue;
    private List<String> stdOut;
    private List<String> stdErr;

    public static ShellResult buildSuccessResult(int exitValue,
                                                 List<String> stdOut,
                                                 List<String> stdErr) {
        ShellResult shellResult = new ShellResult();
        shellResult.setSuccess(true);
        shellResult.setResultMessage("");
        shellResult.setExitValue(exitValue);
        shellResult.setStdOut(stdOut);
        shellResult.setStdErr(stdErr);

        return shellResult;
    }

    public static ShellResult buildFailResult(String resultMessage) {
        ShellResult shellResult = new ShellResult();
        shellResult.setSuccess(false);
        shellResult.setResultMessage(resultMessage);

        return shellResult;
    }
}

 

分享到:
评论

相关推荐

    java调用shell命令.pdf

    在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的必要性 在实际开发中,...

    java调用shell(包含有参数的调用)

    总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...

    java调用shell脚本

    Java作为一种跨平台的编程语言,提供了多种方式来调用Shell脚本,实现与操作系统的交互。本文将深入探讨Java如何调用Shell脚本以及相关的知识点。 首先,Java通过Runtime类或ProcessBuilder类可以执行外部程序,...

    Java 调用 Shell 命令

    在特定的应用场景中,比如完成外币资金的调度工作后,可能需要通过Java程序来生成一个文本文件,并进一步利用Shell脚本来实现文件传输等操作。这涉及到Java与操作系统层面的交互,其中关键的技术点包括:如何使用`...

    java调用shell脚本完美封装

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如自动化运维、文件管理等,这时就可能需要用到调用Shell脚本。本文将详细介绍如何在Java中完美封装shell脚本的调用方法,并提供相关的...

    JAVA执行shell命令小工具

    标题中的“JAVA执行shell命令小工具”指的是使用Java编程语言编写的小程序,它能够执行操作系统级别的Shell命令。在Java中,通常使用`Runtime.getRuntime().exec()`或者`ProcessBuilder`类来实现这一功能。这两个类...

    java调用shell的ganymed工具

    java调用shell的ganymed-ssh2-build210.jar和调用方法的工具类

    java远程调shell

    Java远程调用Shell是一种技术,它允许通过Java程序执行远程服务器上的操作系统命令,这在系统集成、自动化运维或跨平台任务调度中非常有用。这里,我们深入探讨如何实现这一功能,以及涉及的关键知识点。 首先,...

    java Sokcet远程调用shell

    Java Socket远程调用Shell是一...以上就是Java Socket远程调用Shell的核心知识点,通过这样的方式,我们可以实现远程服务器的自动化管理和监控,但需要注意的是,这种做法应当在严格的安全控制下进行,避免潜在的风险。

    java调用shell

    4. **跨平台兼容性测试**:通过在不同操作系统上运行Shell脚本,确保Java应用在各种环境下都能正常工作。 ### 总结 Java调用Shell脚本是IT专业人士必须掌握的一项技能,它不仅增强了程序的灵活性和功能,还提供了...

    java连接linux,执行shell命令的工具类 sshxcute.jar

    在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。...

    java调用shell向DataX传参,带where条件,特殊字符

    Java调用Shell脚本执行DataX任务是一种常见的数据迁移或同步操作。DataX是阿里巴巴开源的数据同步工具,它支持多种数据库之间的数据迁移。在实际应用中,我们可能需要根据特定的业务逻辑,如where条件,来定制数据...

    实验二、HDFS shell操作及HDFS Java API编程

    适合刚接触hadoop的学生或小白,内容包括HDFS shell操作及HDFS Java API编程 有图片有代码

    Java私塾:Hive Shell 基本操作——深入浅出学Hive

    **Java私塾:深入浅出学Hive——Hive Shell基本操作** 在大数据处理领域,Apache Hive 是一种基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(HiveQL)来管理和处理存储在 HDFS 上的大量数据。...

    java_unix_shell.rar_java 模拟 shell_文件管理 java

    Unix Shell是Unix操作系统中的一个命令行接口,用户可以通过它来执行各种系统命令,进行文件管理和系统操作。Java作为一种跨平台的语言,非常适合用于这样的模拟项目,使得在非Unix环境下也能体验和学习Unix Shell的...

    java调用shell向DataX传递参数,where条件,包含特殊字符

    在实际操作中,这可能会涉及到字符串转义、参数安全传递以及shell命令的构建等多个技术点。 首先,我们需要理解DataX的工作原理。DataX作为一个数据同步框架,支持多种数据源,如Oracle、PostgreSQL等,并提供了...

    java spring-boot shell 启动器

    Java Spring-Boot Shell 启动器是一个实用工具,它提供了通过Shell脚本来管理Spring-Boot应用的便捷方式。这个启动器允许用户启动、停止、重启和查看应用日志,而无需手动使用`kill`命令来结束进程。在IT环境中,...

    linux shell的java操作实现

    安装JSch库后,我们可以在Java项目中引入它,进行远程Shell操作。 下面是一段基本的Java代码示例,展示了如何使用JSch连接到远程Linux服务器并执行一个简单的Shell命令: ```java import com.jcraft.jsch.*; ...

    JDK17-java-shell-user-guide.pdf

    在 Java Shell 中,用户可以使用各种命令来执行不同的操作。例如,用户可以使用 `/help` 命令来查看所有可用的命令,使用 `/exit` 命令来退出 Java Shell,使用 `/reload` 命令来重新加载类路径。 Java Shell 还...

    shell脚本启动Java程序测试工程

    在IT行业中,shell脚本是Linux或Unix操作系统中的一种强大工具,用于自动化任务执行和系统管理。当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本...

Global site tag (gtag.js) - Google Analytics