我需要在運行時設置環境變量,並在使用JAVA的UNIX環境中獲取該變量的值。 下面給出的是我的代碼。但是,它無法獲取環境變量,並且在控制檯中沒有顯示進程輸出。沒有任何懷疑被拋出。在運行時設置環境變量並獲取該值
public static void main (String[] args) {
String USR_HOME = System.getProperty("user.home");
String profileName = USR_HOME+"/.profile";
String installPath = System.getProperty("user.dir");
String str = "";
try {
PrintWriter dynServ = new PrintWriter(new BufferedWriter(new FileWriter(profileName,true)));
str = "FIC_HOME=" + installPath;
dynServ.println(str);
str = "export FIC_HOME";
dynServ.println(str);
dynServ.flush();
dynServ.close();
}catch (Exception e){
System.out.println(e.getMessage());
}
ProcessBuilder pb = new ProcessBuilder("sh","-c",". ./.profile");
Map<String, String> env = pb.environment();
env.put("FIC_HOME", USR_HOME+"/Path");
pb.directory(new File(USR_HOME));
try {
Process p = pb.start();
BufferedReader Inreader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line="";
while ((line=Inreader.readLine())!=null)
{
System.out.println(line);
//System.err.println(line);
}
} catch (Exception ex) {
System.out.println("Exeception ::: "+ex.getMessage());
}
System.out.println("FIC_HOME value :::"+System.getenv("FIC_HOME"));
輸出是: .profile文件執行 FIC_HOME值:::空
任何人都可以提出好的建議?
我正在使用一個外部API,它需要FIC_HOME enc變量,並且在執行我的java代碼之前,不能在.profile中使用此變量。所以,我只需要從我的代碼中完成這項工作。我的.profile有一個echo語句,所以它應該在進程輸入流中。 – user709413 2011-04-21 13:18:15