从Java程序运行外部可执行文件

从Java程序运行外部可执行文件,java,exception,Java,Exception,我正在尝试编写一个Java程序,它可以在Linux下运行一个可执行文件。此可执行文件接收两个参数,并使用两个给定参数执行nmap-sP操作 我将此文件称为file.exe,其内容如下: nmap-sP$segment1-$segment1 我已经做了一个chmod+x文件.exe,它位于.class所在的同一目录中 Java代码如下所示: import java.lang.Runtime; import java.lang.Process; import java.io.IOException;

我正在尝试编写一个Java程序,它可以在Linux下运行一个可执行文件。此可执行文件接收两个参数,并使用两个给定参数执行nmap-sP操作

我将此文件称为file.exe,其内容如下:

nmap-sP$segment1-$segment1

我已经做了一个
chmod+x文件.exe
,它位于
.class
所在的同一目录中

Java代码如下所示:

import java.lang.Runtime;
import java.lang.Process;
import java.io.IOException;
import java.lang.InterruptedException;

    public class runFile {

        public static void main (String args[]) throws IOException, InterruptedException {


            Runtime r = Runtime.getRuntime();
            Process p = r.exec("file.exe "+args[0]+" "+args[1]);
            p.waitFor();
        }


    }
编译后,每当我尝试运行它(从文件.exe所在的位置)时

java运行文件

我将获得以下异常和错误日志:

线程“main”java.io.IOException中出现异常:无法运行程序 “file.exe”:错误=2,此时没有此类文件或目录 start(ProcessBuilder.java:1041)位于 java.lang.Runtime.exec(Runtime.java:617)位于 java.lang.Runtime.exec(Runtime.java:450)位于 java.lang.Runtime.exec(Runtime.java:347)位于 runFile.main(runFile.java:12)由以下原因引起:java.io.IOException:error=2, java.lang.UNIXProcess.forkAndExec(本机)中没有这样的文件或目录 方法)位于java.lang.UNIXProcess。(UNIXProcess.java:135)位于 java.lang.ProcessImpl.start(ProcessImpl.java:130)位于 java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)。。。4更多


我缺少什么?

您的java程序在启动java程序的目录中查找
file.exe
。它不会查看包含类文件的目录。

错误告诉您在当前目录或操作系统的搜索路径中找不到可执行文件

尝试将Pathans部分包含在命令中

Process p = r.exec("/path/to/file.exe "+args[0]+" "+args[1]);

您还应该考虑将每个命令/参数分离为单独的参数

Process p = r.exec(new String[]{"/path/to/file.exe ", args[0], args[1]});
这将有助于处理包含空格的参数


您还应该考虑使用<代码> PrimeBuffer-< /C> >,这将允许您更改命令应该执行的目录上下文< /p>您是否试图指定文件.exe的绝对路径?它告诉我<代码> Exc> <代码>没有合适的<代码>执行(字符串、字符串、字符串)< /> >方法。对不起,正在考虑ProcessBuilder,需要使用字符串数组