1

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

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

nmap -sP $segment1-$segment1

我已经做了 achmod +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

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

线程“主”java.io.IOException 中的异常:无法运行程序“file.exe”:错误 = 2,在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1041) 处没有此类文件或目录。 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.(UNIXProcess.java:135) 在 java.lang.UNIXProcess.forkAndExec(Native Method) 没有这样的文件或目录。 ProcessImpl.start(ProcessImpl.java:130) 在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) ... 4 更多

我错过了什么?

4

2 回答 2

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,这将允许您更改应执行命令的目录上下文

于 2013-08-24T21:52:57.177 回答
0

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

于 2013-08-24T21:49:10.607 回答