java调用shell命令并获取执行结果的示例

下面是详细讲解“java调用shell命令并获取执行结果的示例”的完整攻略。

1. Java如何调用Shell命令

在Java中执行Shell命令,可以使用RuntimeProcessBuilder类。

1.1 使用Runtime类调用Shell命令

String command = "ls -l";
Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec(command); // 执行Shell命令

使用Runtime类的exec方法执行Shell命令,返回一个Process对象。

1.2 使用ProcessBuilder类调用Shell命令

String command = "pwd";
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start(); // 执行Shell命令

使用ProcessBuilder类构建Shell命令,返回一个Process对象。

2. 获取Shell命令执行结果

获取Shell命令执行结果,需要从Process对象中获取输入流,再通过IO输出流的方式获取执行结果。

String result = "";
InputStream inputStream = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
    result += line + "\n"; // 将结果拼接为完整的字符串
}

通过getInputStream()方法获取Process对象的输入流,再通过BufferedReader类按行读取输入流中的内容。

注意:要将每行内容拼接在一起,得到完整的执行结果。

3. 完整示例程序

综合以上内容,下面给出两个Java调用Shell命令并获取执行结果的完整示例程序。

3.1 示例一

import java.io.*;

public class ShellDemo1 {

    public static void main(String[] args) {
        String command = "ls -l";
        Runtime runtime = Runtime.getRuntime();
        try {
            Process process = runtime.exec(command);
            String result = "";
            InputStream inputStream = process.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                result += line + "\n";
            }
            System.out.println("执行结果:\n" + result);
            process.waitFor(); // 阻塞等待Shell命令执行完毕
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个示例使用Runtime类执行Shell命令ls -l,获取命令执行结果并输出。

3.2 示例二

import java.io.*;

public class ShellDemo2 {

    public static void main(String[] args) {
        String command = "pwd";
        ProcessBuilder processBuilder = new ProcessBuilder(command);
        try {
            Process process = processBuilder.start();
            String result = "";
            InputStream inputStream = process.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                result += line + "\n";
            }
            System.out.println("执行结果:\n" + result);
            process.waitFor(); // 阻塞等待Shell命令执行完毕
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个示例使用ProcessBuilder类构建Shell命令pwd,获取命令执行结果并输出。

通过以上示例程序,我们了解了Java如何调用Shell命令并获取执行结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java调用shell命令并获取执行结果的示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring常用配置及解析类说明

    下面是“Spring常用配置及解析类说明”的详细攻略。 1. Spring常用配置 1.1 XML配置 Spring框架最初是以XML配置为主的,XML配置的方式包括声明bean和对bean进行依赖注入两个方面。 1.1.1 声明bean 在XML配置文件中,声明bean的方式如下: <bean id="beanId" class=…

    Java 2023年5月19日
    00
  • Java操作Mysql的方法

    关于Java操作MySQL的方法,需要掌握以下几点: 导入数据库驱动程序 建立数据库连接 创建statement对象,执行SQL语句 处理查询结果集 关闭各种连接 下面将详细介绍这些步骤以及如何实现它们。 导入数据库驱动程序 在Java中操作MySQL,需要先导入MySQL的JDBC驱动程序。如果你使用的是Maven等依赖管理工具,可以直接在pom.xml中…

    Java 2023年5月19日
    00
  • Java设计模式之java迭代器模式详解

    Java设计模式之Java迭代器模式详解 迭代器模式(Iterator Pattern)是很多程序员最常用的一种设计模式,它主要用来遍历集合(Collection)中的元素,让我们能够在不暴露集合底层实现的情况下,按照一定顺序访问集合中的元素。本文将详细讲解Java迭代器模式在设计中的应用,以及如何实现Java迭代器模式。 迭代器模式简介 迭代器模式是一种行…

    Java 2023年5月23日
    00
  • 一次线上websocket返回400问题排查的实战记录

    以下是“一次线上websocket返回400问题排查的实战记录”的完整攻略: 问题描述 我们的网站中有一个websocket服务,用于向前端推送实时数据。最近我们收到了一些用户投诉说无法连接websocket服务,并返回了400错误。我们需要排查这个问题并解决它。 问题分析 websocket连接返回400错误一般有以下几种可能的原因: URL路径错误 跨域…

    Java 2023年5月19日
    00
  • Java的Struts框架报错“DuplicateMappingException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“DuplicateMappingException”错误。这个错误通常由以下原因之一起: 重复的Action路径:如果在配置文件中定义了重复的Action路径,则可能会出现此错误。在这种情况下,需要删除重复的Action路径以解决此问题。 重复的Action名称:如果在配置文件中定义了重复的Action名称,则…

    Java 2023年5月5日
    00
  • mybatis自动填充时间字段示例代码

    为了实现 mybatis 自动填充时间字段的功能,需要在实体类中加入 createTime 和 updateTime 字段,并使用注解 @TableField(fill = FieldFill.INSERT) 标记 createTime 字段,在新增时自动填入当前时间,使用注解 @TableField(fill = FieldFill.INSERT_UPDA…

    Java 2023年5月20日
    00
  • java json不生成null或者空字符串属性(详解)

    Java JSON不生成null或者空字符串属性(详解) 在开发过程中,我们经常需要将Java对象序列化成JSON格式,然而默认情况下,在Java对象中含有null或者空字符串的属性时,JSON序列化会将这些属性也序列化出来,这样可能会导致一些问题。此时,我们需要在生成JSON时控制输出项,使其不包含null或空字符串的属性。 生成JSON时控制输出项 我们…

    Java 2023年5月26日
    00
  • Struts2拦截器登录验证实例

    下面是“Struts2拦截器登录验证实例”的完整攻略。 1. 确认需求 首先,我们需要明确需求,即需要在 Struts2 项目中添加登录验证功能。具体来说就是,用户在访问某些敏感页面时,必须先登录才能查看。 2. 创建登录页面和验证页面 第二步,我们需要创建登录页面和验证页面。在登录页面中,需要输入用户名和密码,然后提交表单。在验证页面中,需要根据提交的用户…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部