繁体   English   中英

使用ProcessBuilder从Java运行可执行文件

[英]Using ProcessBuilder to run executable from Java

我的当前目录中有一个名为fingerVerification_fdu03的可执行文件。 我想使用ProcessBuilder从Java运行该可执行文件,所以我这样做:

    Process pb = new ProcessBuilder("fingerVerification_fdu03").start();

但是,即使它与Java程序位于同一目录中,也无法找到该文件。 通常,我可以通过linux终端执行execute fingerVerification_fdu03,只需执行以下操作:

./fingerVerification_fdu03

它将运行。 我究竟做错了什么?

更新:

我尝试添加目录,但仍然遇到相同的问题。 我做了:

    String workingDirectory = new String(System.getProperty("user.dir"));
    File tempDir = new File(workingDirectory);  
    Process p = new ProcessBuilder("fingerVerification_fdu03").
    directory(new File(workingDirectory+"//")).start();

fingerVerification_fdu03文件的扩展名可能出问题了吗? 我不确定如何找出它的扩展名。 它是一个二进制文件,没有列出其扩展名。

您可以通过指定当前目录在提示符下执行命令,因为(很可能)您的PATH不反映该目录。

因此,您应该在ProcessBuilder调用中直接或间接设置PATH 例如,您可以修改由environment()方法返回的环境映射中的PATH,或者可以修改可执行文件名称以反映绝对或相对目录路径(如在命令行上所做的那样)

请注意,将可执行文件与Java程序放在相同的目录中并不意味着您无需指定目录就可以执行该可执行文件。 默认情况下, PATH不包含当前目录( . ),并且出于安全原因,它不应该包含该参数。

有两种已知的可能会产生FileNotFoundException的可能性,第一种是在指定的文件夹中找不到该文件,因此请尝试确保从正确的文件夹中执行Java程序或提供可执行文件的绝对路径。权限问题,请检查是否与具有有效权限的用户一起执行Java程序。

暂无
暂无

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

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