繁体   English   中英

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

[英]Running external executable file from Java program

我正在尝试编写一个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

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

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

我想念什么?

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

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

您的Java程序会在您启动Java程序的目录中查找file.exe 它不会与类文件一起出现在目录中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM