在Java运行时设置Windows PATH环境变量

问题描述 投票:5回答:4

我有一个Java程序,可以使用Runtime.exec()方法触发可执行文件。我正在使用将一组命令行参数作为一个参数,并将一些环境变量作为另一个参数的变体。

我尝试设置的环境变量是path,所以我传入了“ PATH = C:\ some \ path”。这是行不通的。有没有这个或任何替代的把戏。不幸的是,我坚持使用Java 1.4。

java windows environment-variables runtime.exec
4个回答
7
投票

使用getenv获取环境并进行修复,然后使用exec进行执行。

这适用于其中具有路径的批处理文件。

package p;

import java.util.*;

public class Run {
    static String[] mapToStringArray(Map<String, String> map) {
        final String[] strings = new String[map.size()];
        int i = 0;
        for (Map.Entry<String, String> e : map.entrySet()) {
            strings[i] = e.getKey() + '=' + e.getValue();
            i++;
        }
        return strings;
    }

    public static void main(String[] arguments) throws Exception {
        final Map<String, String> env = new HashMap<String, String>(System.getenv());
        env.put("Path", env.get("Path") + ";foo");
        final String[] strings=mapToStringArray(env);
        Runtime.getRuntime().exec("cmd /C start foo.bat",strings);
    }

}

2
投票

如果源代码中出现“ PATH = C:\ some \ path”,那将是不正确的,因为它将试图转义该字符串中的“ s”和“ p”,因此您应使用“ PATH = C :\\ some \\ path“代替(转义斜线)。另外,您也不想直接将其作为字符串传递,而希望作为字符串的[[array传递(可能是其中的唯一字符串)。


2
投票
如果要在Windows上更改Path变量,则应查看JNI_Registry:http://www.trustice.com/java/jnireg/

这是Windows注册表API的Java绑定,占用空间非常小。我已经将其用于当前项目,并且效果很好。


1
投票
一种解决方案可能是在“ exec”中添加一个附加命令,在其中设置路径...如在以下示例中所示:http://www.neowin.net/forum/topic/620450-java-runtimegetruntimeexec-help/

摘录:

cmd = new String[7]; cmd[0] = "cmd"; cmd[1] = "/C"; cmd[2] = "set PATH=C:\\Program Files\\Java\\jdk1.6.0_04\bin"; cmd[3] = "copy " + "\"" +path + "\\" +name+ "\"" + " C:\\java"; cmd[4] = "chdir C:\\java"; cmd[5] = "javac *.java"; cmd[6] = "jar cmf mainClass.txt"+" name"+".jar *.class"; try{ Runtime.getRuntime().exec(cmd);

© www.soinside.com 2019 - 2024. All rights reserved.