【转】java中获取环境变量

分为获取java自身的一些环境变量和和操作系统相关的环境变量。

  • 获取JVM相关的一些变量

在运行时设置一个环境变量 debug 为 true: java -Ddebug=true YourClass
在程序中设置一个环境变量 debug 为 true: System.setProperty( "debug", "true" );
获取一个环境变量 debug : String debug = System.getProperty( "debug" );

下表中列出了一部分环境变量,这些是 Java 已经定义好的,可以在程序中通过 System.getProperty( "key" ) 来获取,更多的环境变量请参阅 JDK 文档。

 

属性名描 述
java.versionJava 运行时版本
java.homeJava 的安装目录
java.class.versionJava 类格式的版本号
java.class.pathJava 类的查找路径
java.io.tmpdir默认的临时目录
java.compilerJava 所使用的及时编译器
java.ext.dirsJava 扩展包的目录
os.name操作系统的名称
os.arch操作系统的体系结构
os.version操作系统的版本
file.separator文件分隔符(Unix 下为'/')
path.separator路径分隔符(Unix 下为':')
line.separator换行符(Unix 下为'/n')
user.name用户帐号名
user.home用户目录
user.dir用户当前的工作目录

 

其他具体的可以参考后面的代码实例程序。

  • 取得操作系统的环境变量

注意,这次是获取操作系统的环境变量,而不是获取JVM相关的一些变量。
  也许是为了营造JVM就是操作系统平台的气氛,抑或是为了强调Java的平台无关性,不知几时起Java已经把System.getenv(String)函数废弃了。所以一般来说Java只能获取它自己定义的一些变量,而无法与操作系统的环境变量交互,只能在运行靠java的“-D”参数来设置要传递给它的一些变量。
  所以唯一的办法只能先判断操作系统,然后用操作系统的命令来调出环境变量列表,设法获得该输出列表。

  • 代码实现
  • Properties getSysEnv() {

  •   Properties prop = new Properties();

      try {
       Process p = null;

       // 判断是哪种操作系统,然后执行相应的命令,该命令的输出必须是类似windows输入set命令的输出格式
       // 增加对新的操作系统的支持,只需改动此处程序即可
       String OS = System.getProperty("os.name").toLowerCase();
       if (OS.indexOf("windows") > -1) {
        p = Runtime.getRuntime().exec("cmd /c set"); // 其它的操作系统可以自行处理,
       } else if (OS.indexOf("linux") > -1) {
        p = Runtime.getRuntime().exec("/bin/sh -c set");
       } else if (OS.indexOf("sunos") > -1) {
        p = Runtime.getRuntime().exec("/bin/sh -c set");
       } else {
        System.out
          .println("### Unknown Operating System : Unknown Operating System! os.name="
            + OS);
        return prop;
       }

       // 把命令行的输出逐行解析,形成一个Properties对象
       BufferedReader br = new BufferedReader(new InputStreamReader(p
         .getInputStream()));
       String line;
       while ((line = br.readLine()) != null) {
        int i = line.indexOf("=");
        if (i > -1) {
         String key = line.substring(0, i);
         String value = line.substring(i + 1);
         prop.setProperty(key, value);
        }
       }
      } catch (Exception ex) {
       System.out
         .println("Exception occurred! Message " + ex.getMessage());
      }
      return prop;
     }

     

    以上代码,把当前的操作系统环境变量取到一个java.utils.Properties中去。一开始用System property “os.name”来判断是哪种操作系统,然后执行一个外部进程,得到一个“name=value”的输出流,并把它用一个InputStream读进来作解析即可。

    目前这段代码支持Windows,Linux,Sun Soloaris三种操作系统,如果要支持其他才作系统,原理很简单,不再细说。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值