可能重复:
如何从Java设置环境变量?
我正在研究Java.我必须在java代码编程中添加一个环境变量,这样当我使用流程构建器获取列表时它将可用,如下所示:
import java.util.Map;
import java.util.Set;
class helloworld {
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("export MY_ENV_VAR=1");
Map<String, String> envMap = pb.environment();
Set<String> keys = envMap.keySet();
for(String key:keys){
System.out.println(key+" ==> "+envMap.get(key));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是通过上述试验我无法正确获得环境变量.那么如何设置环境变量?
Map<String, String> env = pb.environment();
env.put("MV_ENV_VAR", "1");
Run Code Online (Sandbox Code Playgroud)
将设置MY_ENV_VAR = 1.在调用Process by之前
Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)
export 只会被shell解释.
另请参见ProcessBuilder
一个完整的例子:
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "SET");
Map<String, String> env = pb.environment();
env.put("MYVAR", "myValue");
Process p = pb.start();
InputStreamReader isr = new InputStreamReader(p.getInputStream());
char[] buf = new char[1024];
while (!isr.ready()) {
;
}
while (isr.read(buf) != -1) {
System.out.println(buf);
}
}
Run Code Online (Sandbox Code Playgroud)
打印其他环境值:
MYVAR=myValue
Run Code Online (Sandbox Code Playgroud)
这应该证明创建的进程使用被操纵的环境.
小智 5
您可以将所需的变量直接添加到ProcessBuilder.environment()地图中。下面的代码应该工作:
import java.util.Map;
import java.util.Set;
class helloworld {
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("/bin/sh"); // or any other program you want to run
Map<String, String> envMap = pb.environment();
envMap.put("MY_ENV_VAR", "1");
Set<String> keys = envMap.keySet();
for(String key:keys){
System.out.println(key+" ==> "+envMap.get(key));
}
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
46213 次 |
| 最近记录: |