我正在尝试编写一个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
我缺少什么?
答案 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
。它不会查看包含您的类文件的目录。