set windows PATH environment variable at runtime in Java

会有一股神秘感。 提交于 2019-11-28 12:28:30

use http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#getenv%28java.lang.String%29 to get the environment and fix it up then use a flavour of [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String,%20java.lang.String[],%20java.io.File%29][1] to do the exec.

this works with a batch file that has path in it.

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);
    }

}

If "PATH=C:\some\path" appears in your source code, it would be incorrect as it would be trying to escape the 's' and 'p' in that string, you'd use "PATH=C:\\some\\path" instead (escaping the slashes). Also, you don't want to pass it in as a string directly, but as an array of strings (likely with that as the only string in it).

If you want to change the Path variable on windows, you should take a look at JNI_Registry: http://www.trustice.com/java/jnireg/

It's a Java binding to the Windows Registry API and comes with a very small footprint. I have used it for my current project and it works just fine.

One solution might be to add an additional command to "exec" where you set the path ... as in the example found here: http://www.neowin.net/forum/topic/620450-java-runtimegetruntimeexec-help/

excerpt:

            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);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!