使用Java从$ PATH获取可执行文件的绝对路径

时间:2016-07-29 12:12:20

标签: java node.js java-io

我在命令行Java app中调用了nodeJS可执行文件。由于可执行文件位于$PATH变量中的某个位置,因此只需将其称为node即可。但是,我必须提供一个参数(要运行的.js文件),如果我提供node可执行文件的相对路径,nodeJS会抛出一个无法找到.js文件的错误。

所以,我正在寻找的是获取正在运行的node可执行文件的绝对路径,然后编译.js文件的绝对路径,我必须将其作为参数添加到{ {1}}命令。

在Java中有没有办法与平台​​无关?我意识到我可以运行node,获取输出并从那里开始,但我不想硬编码特定于操作系统的命令。

到目前为止,这是我的代码:

where node

注意CommandLine cmdLine = new CommandLine("node"); cmdLine.addArgument("D:/SDKs/Appium/node_modules/appium/lib/server/main.js"); cmdLine.addArgument("--address"); cmdLine.addArgument("0.0.0.0"); cmdLine.addArgument("--port"); cmdLine.addArgument("4444"); cmdLine.addArgument("--app"); File app = new File("some.apk"); cmdLine.addArgument(app.getAbsolutePath()); cmdLine.addArgument("--app-pkg"); cmdLine.addArgument("some.stuff.does.not.matter"); cmdLine.addArgument("--pre-launch"); cmdLine.addArgument("--automation-name"); cmdLine.addArgument("Appium"); System.out.println(cmdLine.toString()); DefaultExecutor executor = new DefaultExecutor(); ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); executor.setWatchdog(watchdog); try { int exitValue = executor.execute(cmdLine); } catch (IOException e) { System.err.println("Error starting Appium: " + e.getMessage()); 的部分?我需要以智能方式构建它以删除硬编码。

1 个答案:

答案 0 :(得分:1)

您必须自己扫描$ PATH。 这是demo(托管在github上)

关键点是:

System.getenv("PATH")
      .split(System.getProperty("path.separator"))

其余部分对于每条路径都很简单,并且搜索名为" node"的文件。