如何检查路径中是否存在程序

Ste*_*ury 15 java scala runtime

我正在用scala写一个程序,它调用:

Runtime.getRuntime().exec( "svn ..." )
Run Code Online (Sandbox Code Playgroud)

我想检查命令行中是否有"svn"可用(即可以在PATH中访问).我怎样才能做到这一点 ?

PS:我的程序设计用于在Windows上运行

Dmi*_*urg 21

也许有人会对Java 8解决方案感兴趣:

String exec = <executable name>;
boolean existsInPath = Stream.of(System.getenv("PATH").split(Pattern.quote(File.pathSeparator)))
        .map(Paths::get)
        .anyMatch(path -> Files.exists(path.resolve(exec)));
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以替换anyMatch(...)filter(...).findFirst()- 所以您将获得确切的可执行路径.

  • @JoshuaNelson,您可以将`Files.exist(...)`替换为`Files.exist(...)&amp;&amp; Files.isExecutable(...)` (2认同)

Fil*_*eca 13

我不是scala程序员,但我会用任何语言做的是执行类似' svn help'只是为了检查exec方法的返回码(0或1)......如果失败则svn不在路径:P

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("svn help");
int exitVal = proc.exitValue();
Run Code Online (Sandbox Code Playgroud)

按照惯例,值0表示正常终止.

  • 我认为最好做“which svn”而不是“svn help”。它仍然会给出关于 svn 是否存在于路径中的正确返回代码,但如果成功,您还将获得 svn 可执行文件的完整路径。 (3认同)
  • 在尝试获取退出值之前,您必须调用 Process#waitFor()。请参阅 http://stackoverflow.com/questions/25979336/handling-the-illegalthreadstateexception (2认同)