我的当前目录中有一个名为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文件的扩展名可能有问题吗?我不知道如何找出它有什么扩展名。它是一个二进制文件,并没有列出它的扩展名。
答案 0 :(得分:1)
您可以通过指定当前目录在提示中执行该命令,因为(很可能)您的PATH
不反映该目录。
因此,您应该在PATH
调用中设置ProcessBuilder
(直接或间接)。例如您可以修改environment()
方法返回的环境映射中的PATH,也可以修改可执行文件名以反映绝对或相对目录路径(正如您在命令行中所做的那样)
请注意,将可执行文件放在与Java程序相同的目录中并不意味着您可以在不指定目录的情况下执行它。出于安全原因,PATH
默认情况下不包含当前目录(.
),并且出于安全原因,它有一个不应该出现的参数。
答案 1 :(得分:0)
可能生成FileNotFoundException的两种已知可能性,第一种是在指定的文件夹中找不到该文件,因此请确保从正确的文件夹中执行java程序或提供可执行文件的绝对路径。第二种可能性是权限问题,因此请检查您是否使用具有有效权限的用户执行java程序。