如何从java代码在unix终端中执行外部工具?

如何从java代码在unix终端中执行外部工具?,java,shell,unix,command,Java,Shell,Unix,Command,我尝试用java代码执行一个基本命令,即“java-version”。我的代码适用于shell命令,例如“ls”、“echo$PATH”等。 我的代码: import java.io.*; public class cmd { public static void main(String[] args) { String command = "java -version"; Process proc = null; try {

我尝试用java代码执行一个基本命令,即“java-version”。我的代码适用于shell命令,例如“ls”、“echo$PATH”等。 我的代码:

import java.io.*;

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

        String command = "java -version";
        Process proc = null;
        try {
            proc = Runtime.getRuntime().exec(command);
        } catch (IOException e1) {
            System.out.println( "IOException 1" );
        }

        BufferedInputStream buffer = new BufferedInputStream( proc.getInputStream() );
        BufferedReader commandOutput= new BufferedReader( new InputStreamReader( buffer ) );
        String line = null;
        try {
            while ( ( line = commandOutput.readLine() ) != null ) {
                System.out.println( line );
            }
            commandOutput.close(); 
        } catch ( IOException e) {
            System.out.println( "IOException 2" );
        }
    }
}
代码运行时没有异常或错误,但没有输出


如果String command=“ls”,则可以处理代码,并且可以在控制台中看到输出。

检查您拥有的流程对象。您可能会看到一条错误消息,告诉您需要指定java可执行文件的完整路径,才能使其正常工作。但是,如果原因有所不同,那么在输出所述流的内容时,您也应该看到这一点。

检查您拥有的流程对象。您可能会看到一条错误消息,告诉您需要指定java可执行文件的完整路径,才能使其正常工作。但是,如果原因有所不同,那么在输出所述流的内容时也应该看到这一点。

将命令的输出重定向到一个tempfile,如“ls>atter.txt”。这可能会解决问题

将命令的输出重定向到类似“ls>atter.txt”的临时文件。这可能会解决问题

指定工具的完整路径非常有用且有效。谢谢。无论如何,您至少应该得到错误流输出-如果除了错误路径之外还有任何其他错误,没有错误流,您就不会知道它是关于什么的……我做到了;)迟做总比不做强:)为工具指定完整路径是有用且有效的。谢谢。无论如何,您至少应该得到错误流输出-如果除了错误路径之外还有任何其他错误,没有错误流,您就不会知道它是关于什么的……我做到了;)迟到总比不迟到好:)