[原]java运行时修改系统环境变量

项目需要在程序运行时修改系统的环境变量,并在结束时还原。
Java运行时可以用System.getEnv(“{EnvName}”)的方法获得系统环境变量,比如PATH。
但是,Java 6.0没有setEnv方法,查询API文档得知Java 8.0也没有setEnv方法.

方案一:

通过Java IO修改 ~/.bashrc(Linux), /etc/bashrc(Mac OS X)。并用
Runtime.getRuntime.exec("source bashrc")
命令执行bashrc文件。
结果失败
原因是执行bashrc后,当前程序的环境变量还是当前程序启动时的环境变量,并没有变化。即使通过Process p = new ProcessBuild("java","{another xxx.class}").start();
新建一个java子进程,仍然继承当前程序启动时的环境变量,而不是执行bashrc后的变量。

方案二:

c++的 import <stdlib.h>的setenv(“{Name}={Value}”)函数设置系统环境变量PATH。这个修改对且仅对当前进程生效,这正是项目需要的。
用java写一个接口文件, 并用javah生成c++的.h文件。
生成dll动态链接库文件,导入java项目。
结果成功

最后感叹,和系统打交道,Java还是弱了一点.

你可能感兴趣的:(java)