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

时间:2014-07-10 15:25:09

标签: java linux file-io

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

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

然而,它说无法找到该文件,即使它与java程序位于同一目录中。通常,我可以通过linux终端执行executeVerification_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文件的扩展名可能有问题吗?我不知道如何找出它有什么扩展名。它是一个二进制文件,并没有列出它的扩展名。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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