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

时间:2013-08-24 21:42:11

标签: java exception

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

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

  

nmap -sP $segment1-$segment1

我已经做了 chmod +x file.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();
        }


    }

编译后,每当我尝试通过

运行它(从file.exe所在的位置)
  

java runFile

我收到以下异常和错误日志:

  

线程“main”中的异常java.io.IOException:无法运行程序   “file.exe”:error = 2,没有这样的文件或目录   java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)at   java.lang.Runtime.exec(Runtime.java:617)at   java.lang.Runtime.exec(Runtime.java:450)at   java.lang.Runtime.exec(Runtime.java:347)at   runFile.main(runFile.java:12)引起:java.io.IOException:error = 2,   java.lang.UNIXProcess.forkAndExec中没有这样的文件或目录(Native   方法)在java.lang.UNIXProcess。(UNIXProcess.java:135)at   java.lang.ProcessImpl.start(ProcessImpl.java:130)at   java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)... 4 more

我缺少什么?

2 个答案:

答案 0 :(得分:2)

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

尝试包含命令的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]});

这将有助于包含空格的参数。

您还应该考虑使用ProcessBuilder,这将允许您更改命令应该执行的目录上下文

答案 1 :(得分:0)

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