【问题标题】:Running external executable file from Java program从 Java 程序运行外部可执行文件
【发布时间】:2013-08-27 17:14:57
【问题描述】:

我正在尝试编写一个 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.ProcessBuilder.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(Native) 中没有这样的文件或目录 方法)在 java.lang.UNIXProcess.(UNIXProcess.java:135) 在 java.lang.ProcessImpl.start(ProcessImpl.java:130) 在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) ... 4 更多

我错过了什么?

【问题讨论】:

  • 您是否尝试过指定file.exe的绝对路径?

标签: java exception


【解决方案1】:

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

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

【讨论】:

  • 它告诉我exec 没有合适的exec(String, String, String) 方法。
  • 对不起,在想ProcessBuilder,需要使用String数组
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多