`
touchinsert
  • 浏览: 1329359 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用ProcessBuilder调用外部命令,并返回大量结果

阅读更多

在网上常见的用Java调用外部命令返回结果的方法是:

process =runtime.exec(cmd)
is = process.getInputStream();
isr=new InputStreamReader(is);
br =new BufferedReader(isr);

while( (line = br.readLine()) != null )
{
out.println(line);
out.flush();
}
这种方法在遇到像cvs checkout modules这样不能马上返回结果的命令来说是无效的,不仅得不到返回结果,进程也会终止。其原因是,process在没有来得及gegtInputStream是,调用了BufferedReader.readLine其返回结果是null,也就是说循环一开始就会停止。因此想要正常运行只能直接读取process.getInputStream(),如下:

import java.io.*;
/**
*
* @author tyrone
*
*/
public class CMDExecute
{

/**
* @param cmd
* @return
* @throws IOException
*/
public synchronized String run(String[] cmd,String workdirectory) throws IOException{

String line=null;
String result="";
try {
ProcessBuilder builder = new ProcessBuilder(cmd);
//set working directory
if (workdirectory!=null)
builder.directory(new File(workdirectory));
builder.redirectErrorStream(true);
Process process = builder.start();
InputStream in=process.getInputStream();

byte[] re=new byte[1024];
while (in.read(re)!= -1) {
System.out.println(new String(re));
result = result + new String(re);
}
in.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}

/**
* @param args=cvslog */
public static void main(String[] args){
String result=null;
CMDExecute cmdexe=new CMDExecute();
try {
result= cmdexe.run(args,"D:\\MyProject\\colimas\\axis_c");
System.out.println(result);
}catch ( IOException ex ){
ex.printStackTrace();
}

}

}

经过测试,本方法可以运行返回大量结果的应用程序。

分享到:
评论

相关推荐

    ProcessBuilder非阻塞是调用

    第二种方法是使用 ProcessBuilder 类的 start() 方法,该方法可以异步执行外部命令或程序,并在执行完成后返回 Process 对象。 在 StreamDrainer 类中,我们可以看到使用了 BufferedReader 和 InputStreamReader 来...

    Java如何基于ProcessBuilder类调用外部程序

    Java如何基于ProcessBuilder类调用外部程序 Java中的ProcessBuilder类提供了一种方便的方式来调用外部程序。...通过示例代码,我们可以看到如何使用ProcessBuilder类来调用外部命令,并处理其输出结果。

    调用外部命令.rar

    10. **性能优化**:通过合理安排命令执行顺序,使用命令管道、重定向、通配符等特性,可以提高调用外部命令的效率。 总结,调用外部命令是一个涵盖广泛的主题,涉及操作系统交互、自动化、程序设计等多个方面。正确...

    用JAVA调用外部程序并截出程序运行结果

    本文将详细讲解如何使用Java调用外部程序以及如何捕获并处理程序的输出。 首先,`Runtime.getRuntime().exec()`方法是Java中最基础的调用外部程序的方式。它允许我们执行系统命令,并返回一个`Process`对象,通过该...

    Java调用外部程序命令

    本文将详细介绍如何使用Java来调用外部程序,并解决在这一过程中可能遇到的一些常见问题。 #### 二、基础知识 在Java中,调用外部程序主要涉及到三个类:`java.lang.Runtime`、`java.lang.Process` 和 `java.lang....

    java调用DOS命令

    Java调用DOS命令是指在Java程序中执行操作系统级别的命令,比如Windows下的CMD命令或Linux下的Shell命令。这种功能在很多场景下都很有用,比如自动化脚本、文件操作、系统管理等。Java提供了Runtime类和...

    exchange/powershell,Java调用powershell开通邮箱

    - 掌握Java编程,特别是如何使用Java的`ProcessBuilder`或`Runtime.exec()`来执行外部命令。 - 熟悉网络编程,了解如何使用Socket进行进程间的通信。 - 熟悉权限管理和安全实践,因为这涉及到在Java应用中执行...

    java 调用 dos 命令

    Java调用DOS命令主要涉及Java的Runtime类和ProcessBuilder类,这两个类允许Java程序执行外部命令,也就是我们常说的DOS命令或者Windows命令行指令。这个过程通常被称为进程交互或者系统调用。 首先,Runtime类是每...

    java工程 实现调用系统命令ping

    这会返回一个`Process`对象,我们可以用它来获取命令执行的结果。 3. **处理输出**:`Process`对象提供了`getInputStream()`和`getErrorStream()`方法,分别用于读取命令的标准输出和错误输出。我们需要读取这些流...

    JAVA调用OS命令删除文件

    使用`Runtime`或`ProcessBuilder`调用OS命令删除文件的优点包括: 1. **灵活性**:可以执行任何系统命令,不仅限于删除文件,还可以进行其他操作,如移动、重命名等。 2. **速度**:某些情况下,调用OS命令可能比...

    Java简单实现调用命令行并获取执行结果示例

    本文将结合实例形式详细介绍Java简单实现调用命令行并获取执行结果示例,包括如何使用Runtime.getRuntime().exec()方法执行ping命令、如何使用BufferedReader读取命令行执行结果、如何处理异常等。 命令行调用技术...

    用java 调用外部程序

    在Java编程中,有时我们需要调用操作系统中的外部程序来执行特定任务,比如运行批处理脚本、系统命令或者使用第三方工具。这篇博文“用java 调用外部程序”可能详细介绍了如何在Java环境中实现这一功能。虽然描述...

    java中调用控制台程序

    当执行命令后,通常需要读取子进程的输出流(stdout和stderr)以获取命令的返回结果或错误信息。不及时处理这些流可能导致进程阻塞。可以使用InputStreamReader和BufferedReader读取: ```java BufferedReader ...

    java 调用 windows cmd 命令

    本文将深入探讨如何在Java中调用Windows CMD命令,并提供一个具体的代码示例——`FileProcessInShell.java`。 首先,我们来看Java是如何调用外部命令的。在Java中,有两种主要的方法可以执行系统命令: 1. **...

    java调用dos命令

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如创建文件夹...同时,由于`Runtime.exec()`方法可能涉及权限问题,因此在生产环境中,建议使用更安全的`ProcessBuilder`类来执行外部命令。

    java 调用doc命令

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的命令,比如调用外部程序、操作文件等。本文将详细讲解如何在Java中调用`doc`命令,以及使用`CMDExec`来实现这一功能。 `doc`命令通常指的是打开...

    使用java调用windows WIN脚本

    首先,Java中可以通过`Runtime`或`ProcessBuilder`类来执行外部命令,包括运行Windows批处理脚本(.bat)和VBS脚本(.vbs)。`Runtime.exec()`方法允许我们在Java程序中执行操作系统级别的命令,而`ProcessBuilder`...

    使用JAVA调用应用程序.pdf

    使用 Runtime.exec() 方法可以调用外部应用程序,例如,我们可以使用以下代码来调用 Notepad++ 编辑器: ```java Runtime.getRuntime().exec("notepad++.exe"); ``` 这将打开 Notepad++ 编辑器,用户可以在其中编辑...

    Java调用相应cmd命令的实例

    2. 使用`ProcessBuilder`调用CMD命令: ```java try { ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir"); Process process = pb.start(); BufferedReader reader = new BufferedReader(new ...

Global site tag (gtag.js) - Google Analytics