【问题标题】:How can I set/update PATH variable from within java application on Windows?如何在 Windows 上的 java 应用程序中设置/更新 PATH 变量?
【发布时间】:2012-01-11 03:33:09
【问题描述】:

相当于这个命令行的东西:

set PATH=%PATH%;C:\Something\bin

要运行我的应用程序,某些东西必须在 PATH 变量中。因此,如果程序无法启动,我希望在程序开始时捕获异常,并显示一些向导供用户选择需要在 PATH 中的程序的安装文件夹。我会采用该文件夹的绝对路径并将其添加到 PATH 变量中并再次启动我的应用程序。

编辑

那个“东西”就是 VLC 播放器。我需要它在 PATH 变量中的安装文件夹(例如:C:\Program Files\VideoLAN\VLC)。我的应用程序是单个可执行的 .jar 文件,为了使用它,VLC 需要位于 PATH 中。所以当用户第一次启动我的应用程序时,会弹出那个小向导来选择 VLC 文件夹,然后我会用它更新 PATH。

【问题讨论】:

  • 那个“东西”独立于你的程序?在启动程序之前,我会使用一个 conf/properties 文件,我可以从我的 .bat 中使用它来附加到 PATH。查看任何开源应用服务器的 .bat 文件,例如 JBoss 等,了解如何实现这一点。
  • 如果用户基本是要输入你需要的程序的路径,为什么还要修改PATH变量呢?如果你不知道你需要的程序的绝对路径,你只需要修改PATH。
  • @david 用户只会这样做一次,在他第一次启动应用程序时,而不是每次启动时。
  • @Usman Saleem 我编辑了这个问题。
  • @vale4674 -- 在我看来,最好将用户的输入保存到配置文件中。如果程序已经在 PATH 上,您仍然可以获取其绝对路径并将其保存到 conf 文件中。 stackoverflow.com/questions/318239/…

标签: java windows path


【解决方案1】:

您可以使用Process 对象执行命令,也可以使用BufferedReader 读取该命令的输出,这是一个可以帮助您的快速示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String args[]) {
        try {
            Process proc = Runtime.getRuntime().exec("cmd set PATH=%PATH%;C:\\Something\\bin");
            proc.waitFor();
            BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));

            String line = reader.readLine();
            while (line != null) {
                //Handle what you want it to do here
                line = reader.readLine();
            }
        } 
        catch (IOException e1) { 
            //Handle your exception here
        }
        catch(InterruptedException e2) {
            //Handle your exception here
        }

        System.out.println("Path has been changed");
    }
}

【讨论】:

  • 这看起来像是我从 java 应用程序执行 cmd 命令所需的东西,但现在我发现我还有另一个问题。我问了另一个question
  • 是的。这实际上并不能解决 OP 的问题。特别是cmd set ... 启动一个新的命令外壳并在其中设置环境变量。然后外壳退出。您需要使用setx 而不是set ...但这不会更改现有 shell 的设置。
猜你喜欢
  • 2015-01-15
  • 2023-03-21
  • 2016-07-28
  • 2015-04-11
  • 2017-03-30
  • 2021-02-12
  • 2021-12-23
  • 2011-02-14
相关资源
最近更新 更多