We can get the environment variable using java System.getenv("env-name").
  
 
But there is no setter for this.
You can set it like this
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Test {
 public static void main(String[] args) throws Exception {
  Map map = System.getenv(); 
  Map newmap = new HashMap();  
  newmap.putAll(map);
  newmap.put("abc", "----------");
  setEnv(newmap);
  System.out.println(map);
  System.out.println("done");
  System.out.println(System.getenv("abc"));
  newmap.remove("abc");
  setEnv(newmap);
  System.out.println(System.getenv("abc"));
 }
 private static void setEnv(Map newenv) 
 {
   try
     {
         Class processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment");
         Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment");
         theEnvironmentField.setAccessible(true);
         Map env = (Map) theEnvironmentField.get(null);  
         env.putAll(newenv);
         Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
         theCaseInsensitiveEnvironmentField.setAccessible(true);
         Map cienv = (Map)     theCaseInsensitiveEnvironmentField.get(null);  
         cienv.putAll(newenv);
     }
     catch (NoSuchFieldException e)
     {
       try {
         Class[] classes = Collections.class.getDeclaredClasses();
         Map env = System.getenv(); 
         for(Class cl : classes) {
             if("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {
                 Field field = cl.getDeclaredField("m");
                 field.setAccessible(true);
                 Object obj = field.get(env);
                 Map map = (Map) obj;  
                 map.clear();
                 map.putAll(newenv);
             }
         }
       } catch (Exception e2) {
         System.out.println(e2);
       }
     } catch (Exception e1) {
      System.out.println(e1);
     } 
 }
}
 
 
No comments:
Post a Comment