如何从Java设置环境变量?我看到我可以使用子进程执行此操作ProcessBuilder.我有几个子进程要启动,所以我宁愿修改当前进程的环境,让子进程继承它.
有一个System.getenv(String)获取单个环境变量.我也可以获得一套Map完整的环境变量System.getenv().但是,要求put()对Map引发UnsupportedOperationException-显然,他们的意思是对环境只能被读取.并且,没有System.setenv().
那么,有没有办法在当前运行的进程中设置环境变量?如果是这样,怎么样?如果没有,理由是什么?(这是因为这是Java,因此我不应该做一些邪恶的非便携式过时的事情,比如触摸我的环境吗?)如果没有,那么管理环境变量的任何好建议都会改变我需要提供给几个子进程?
我正在寻找通过命令行执行外部程序,但我发现如果程序存在于我调用它的目录中,我只能这样做.我希望能够从任何目录执行该程序.
我为windows(7)设置了Path变量,并且能够使用命令行手动从任何目录执行程序; 但是我无法通过Java这样做.
相关代码:
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP});
Run Code Online (Sandbox Code Playgroud)
我的问题是上述程序的输出产生了一般命名的文件"log.txt".在线程化程序时会出现问题.如果无法使用路径变量,或者我可以将程序复制到新目录中,然后将其删除.我想避免这样做.
编辑:上面的代码适用于GetLog.exe驻留在C:\ AutomateKPI中.我想引用%PATH%,这样我就可以从C:\ AutomateKPI\*NewDir*运行GetLog.exe
我试图从eclipse运行set命令,但我得到以下异常.
java.io.IOException: Cannot run program "set": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
Run Code Online (Sandbox Code Playgroud)
这是我的一段代码:
String command = "set Path=C:/Program Files/Java/jdk1.6.0_21/bin";
Process p = Runtime.getRuntime().exec(command);
Run Code Online (Sandbox Code Playgroud)