0 0

关于Runtime.getRuntime()5

 

 

java调用外部程序获取其输出的问题
1.在Windows下,java调用外部程序,获取其输出
(1)为什么java使用“cmd.exe /c java”可以输出,“cmd.exe /c java -version”不能输出?
(2)为什么直接在命令提示符中执行“cmd.exe /c java -version”可以正常输出,在java中调用执行“cmd.exe /c java -version”却不能输出
(3)有没有其他在java中调用的可以获得和在命令提示符中执行“cmd.exe /c java -version”得到的输出结果相同的命令,如“cmd.exe /c java -version 2>&1”
2.在linux下,java调用外部程序,获取其输出
(1)在终端下执行“sh -c 'java -version'”和“sh -c 'java -version' 2>&1”都能正常输出,但在java代码中调用时这两个都获取不到输出结果,而在windows下与“sh -c 'java -version' 2>&1”相似的“cmd.exe /c java -version 2>&1”却可以被java调用并输出到控制台,为什么?
(2)求一条在linux下java调用得到的输出和在shell中执行“sh -c 'java -version'”输出结果一致的命令
 
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class ProcessTest {
    public static void main(String[] args) {

        try {
        	String cmd = null;
        	cmd = "cmd.exe /c dir";			//可以输出
        	cmd = "cmd.exe /c java";	//可以输出
        	cmd = "cmd.exe /c java -version 2>&1";	//可以输出
        	cmd = "cmd.exe /c java -version";	//不可以输出
        	
            Process process = Runtime.getRuntime().exec(cmd);
            PrintWriter writer = new PrintWriter(process.getOutputStream());
            new CommandThread(writer).start();
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            
            String s = null;
            while ((s = br.readLine()) != null) {
                System.out.println(s);
            }
            Thread.currentThread().interrupt();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    
    static class CommandThread extends Thread{
        PrintWriter writer;
        BufferedReader br = null;
        CommandThread(PrintWriter writer){
            this.writer = writer;
            br = new BufferedReader(new InputStreamReader(System.in));
            this.setDaemon(true);
        }
        
        @Override
        public void run() {
            try {
                String cmd = null;
                while((cmd = br.readLine()) != null){
                    writer.println(cmd);
                    writer.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
 

 

 

2013年7月03日 22:06

2个答案 按时间排序 按投票排序

0 0

采纳的答案

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "java -version");

因为使用字符串的最终会被jdk,转化为数组如上面的形式执行,请直接使用上面的形式做

2013年7月04日 14:37
0 0

LZ能否给出详细解释,最后能在控制台输出的思路是什么,求拍

2013年7月04日 09:56

相关推荐

    详解Java8与Runtime.getRuntime().availableProcessors()

    在Java 8中,`Runtime.getRuntime().availableProcessors()`是一个重要的方法,用于获取当前系统可用的处理器核心数量。这个信息对于优化多线程程序,尤其是使用并行处理的场景至关重要,例如Java 8引入的并行流...

    使用runtime实现linux命令行或shell脚本多次调用

    通过`Runtime.getRuntime()`方法,我们可以获取到当前运行时环境的`Runtime`实例。一旦有了`Runtime`实例,我们就可以使用它的`exec`方法来执行命令行指令。 在标题提到的场景中,我们需要多次调用Linux命令或shell...

    Runtime 执行bat

    `Runtime.getRuntime()`是获取当前Java虚拟机的`Runtime`实例。这个静态方法让Java应用程序能够与操作系统进行交互,比如执行外部命令、读取环境变量等。 2. **`exec()`方法** `Runtime`类提供了多个`exec()`方法...

    解决runtime.exec()执行进程block死锁以及为waitFor设置超时

    完美解决runtime.exec()执行进程block死锁以及为waitFor设置超时 不需要耗cpu的循环判断exitValue==0 开两个进程搞定

    Android中软件的静默安装

    1,申请root权限Runtime.getRuntime().exec("su"); 2,通过数据输出流DataOutputStream写入pm install命令; 3,最后获取Process进程的返回值int i = process.waitFor();,如果i=0,则表明已获取root权限。

    【IDEA】windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案

    windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案前言解决办法后记 前言 在使用IDEA本地开发监控守护线程的后台,我遇上了执行环境不兼容的问题,爆出各种“xxx不是内部或外部命令,...

    android截屏

    这里不是通过view来截图,也不是通过底层的framebuffer实现截图,而是采用另外一种方法实现截图,通过Runtime.getRuntime().exec()来实现,并保存在sdcard上,代码很简单。

    android读取/显示logcat信息

    这通常涉及使用`Runtime.getRuntime().exec()`方法来执行shell命令。 4. **解析和显示日志**:将`adb logcat`的输出解析成日志条目,然后在界面上展示。每个条目包含时间戳、优先级、标签和消息。你可以创建一个...

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    proc = Runtime.getRuntime().exec(command); new StreamReader(proc, proc.getInputStream(), "Output").start(); new StreamReader(proc, proc.getErrorStream(), "Error").start(); } catch (IOException ex)...

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    例如,`Runtime.getRuntime().exec("cmd /c " + command)`会执行一个CMD命令。 3. **输入输出流管理**:你需要连接到进程的输入流(`Process.getOutputStream()`)来发送命令,以及错误和标准输出流(`Process....

    Java调用Python的jar包

    首先,我们需要了解Java如何调用外部程序,这通常通过`java.lang.ProcessBuilder`类或`Runtime.getRuntime().exec()`方法来实现。这两个方法允许Java启动一个新的进程,并执行操作系统命令。因此,我们可以在Java中...

    java.lang.Runtime.exec() Payload知识点详解

    在 Java 语言中,可以使用 Runtime.getRuntime().exec() 方法执行命令,该方法可以执行操作系统命令,并返回结果。例如,可以使用以下代码执行命令: `String cmd = "ls -l"; Process process = Runtime.getRuntime...

    AIUI使用.rar

    Runtime runtime = Runtime.getRuntime(); try { runtime.exec("cmd /c start " + url); } catch (IOException e) { e.printStackTrace(); } } /** * 鍦ㄥ欢杩熸寚瀹氱殑绉掓暟鍚庡叧鏈? * ...

    Android获取App内存使用情况的方法

    此外,还可以使用 Runtime.getRuntime().totalMemory() 和 Runtime.getRuntime().freeMemory() 方法分别获取当前 App 的总内存和剩余内存。 ```java float totalMemory = (float) (Runtime.getRuntime().total...

    Android程序中(APK程序)执行Adb shell 命令

    Process process = Runtime.getRuntime().exec("su -c adb shell command"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = ...

    操作进程,显示与杀死

    如果需要强制结束,只需添加`/F`参数,如`Runtime.getRuntime().exec("taskkill /F /im Notepad.exe")`。 然而,使用Jacob库操作Office进程可能存在效率低下和服务器稳定性问题。微软官方建议不要在服务器端自动...

    java调用本地浏览器的demo

    首先,`Runtime.getRuntime().exec()`方法是Java标准库中用于执行系统命令的常用方式。例如,如果你想在Windows环境下打开默认浏览器,你可以这样写: ```java String url = "http://www.example.com"; Runtime....

    java调用windows命令

    - 使用`Runtime.getRuntime().exec()`方法创建一个子进程来执行指定的可执行程序。例如: ```java Process process = Runtime.getRuntime().exec(".\\p.exe"); ``` - `exec()`方法返回一个Process对象,可以...

    安卓程序发送linux指令.zip

    `Runtime.getRuntime().exec()` 方法是Java中用于执行外部命令的一个关键接口,它允许Android应用在运行时执行shell命令。在"安卓程序发送linux指令.zip"这个压缩包中,我们重点关注的是如何使用Java在Android应用中...

Global site tag (gtag.js) - Google Analytics