【问题标题】:Get the location of executables in PATH获取可执行文件在 PATH 中的位置
【发布时间】:2013-11-29 22:58:18
【问题描述】:

我想在 Java 中使用 rar.exe 路径。这是在不使用库的情况下从我的 Java 应用程序中解压缩 rar 文件所必需的。

我想我会要求用户将 Winrar 的程序文件夹添加到 PATH 系统变量中。

我现在只需要知道如何获取rar.exe 文件的完整路径。

我现在得到的是这样的:

//Split all paths
String[] paths = System.getenv("Path").split(";");
for(String value : paths)
{
    if(value.endsWith("Winrar"))
        System.out.println(value);
}

但是,我无法知道用户是否安装了 Winrar 以说出 C:\Programfiles\Winrarstuff。有没有办法获取rar.exe 的位置,还是我必须手动扫描路径字符串中的每个文件夹以查找该位置?

【问题讨论】:

    标签: java windows system-paths


    【解决方案1】:

    您可以在 Windows Server 2003+ 上使用 where,这大致相当于 *nix 中的 which,但是您可以使用此处找到的代码在其他 Windows 环境中获得类似的行为:https://stackoverflow.com/a/304441/1427161

    【讨论】:

      【解决方案2】:

      rar.exe 的路径在PATH 环境变量中时,您可以简单地从任何文件位置调用rar.exe。这意味着您也可以通过Runtime.exec(...) 调用它。如果返回码不是 0,则进程无法启动,例如因为没有安装Winrar:

      public static boolean checkRar() {
          Process proc = Runtime.getRuntime().exec("cmd /c rar.exe");
          try (BufferedReader reader =
                  new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
              String line;
              while ((line = reader.readLine()) != null) {
                  // parse line e.g. to get version number
              }
          }
          return (proc.waitFor() == 0);
      }
      

      【讨论】:

      • 我的第一个代码 sn-p 只是执行“rar.exe”不尊重 PATH 环境。而是必须调用“cmd /c rar.exe”(仅限 Windows!)并且需要从进程中读取输入,否则它不会终止。
      • 你为什么要在这里执行rarcmd
      • @Joey 如果您不这样做,PATH 环境变量将被忽略,因此您必须指定 rar.exe 的完整路径。
      • 那么在Java中PATH中没有可移植的方式来执行程序吗?这听起来很奇怪。
      • 是的,但另一方面,rar.exe 也不能移植,所以无论如何都必须移植代码。
      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 2017-04-28
      • 2018-10-31
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多