• java中获取系统属性以及环境变量


    java中获取系统属性以及环境变量

    System.getEnv()和System.getProperties()的差别

    从概念上讲,系统属性 环境变量 都是名称与值之间的映射。两种机制都能用来将用户定义的信息传递给 Java 进程。环境变量产生很多其它的全局效应,由于它们不仅对Java 子进程可见,并且对于定义它们的进程的全部子进程都是可见的。在不同的操作系统上,它们的语义有细微的区别,比方,不区分大写和小写。由于这些原因,环境变量更可能有意料不到的副作用。最好在可能的地方使用系统属性。环境变量应该在须要全局效应的时候使用,或者在外部系统接口要求使用环境变量时使用(比方 PATH)。

    代码例如以下

    public static void main(String [] args)

           {

                  Map m = System.getenv();

                  for ( Iterator it = m.keySet().iterator(); it.hasNext(); )

                  {

                         String key = (String ) it.next();

                         String value = (String )  m.get(key);

                         System.out.println(key +":" +value);

                  }

                  System.out.println( "--------------------------------------" );

                  Properties p = System.getProperties();

                 

                  for ( Iterator it = p.keySet().iterator(); it.hasNext(); )

                  {

                         String key = (String ) it.next();

                         String value = (String )  p.get(key);

                         System.out.println(key +":" +value);

                  }

           }

     

    输入例如以下:

    ANT_HOME:D:/program/devel/ant

    PROCESSOR_ARCHITECTURE:x86

    LOGONSERVER://RJ-WEIJIANJUN

    HOMEDRIVE:C:

    CATALINA_HOME:D:/program/server/Tomcat5.5

    DXSDK_DIR:d:/Program Files/Microsoft DirectX SDK (August 2008)/

    VS80COMNTOOLS:C:/Program Files/Microsoft Visual Studio 8/Common7/Tools/

    SESSIONNAME:Console

    HOMEPATH:/Documents and Settings/Administrator

    TMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp

    windir:C:/WINDOWS

    PROCESSOR_IDENTIFIER:x86 Family 6 Model 15 Stepping 13, GenuineIntel

    VS90COMNTOOLS:e:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/

    SystemDrive:C:

    USERPROFILE:C:/Documents and Settings/Administrator

    PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

    CommonProgramFiles:C:/Program Files/Common Files

    NUMBER_OF_PROCESSORS:2

    ComSpec:C:/WINDOWS/system32/cmd.exe

    COMPUTERNAME:RJ-WEIJIANJUN

    OS:Windows_NT

    USERNAME:Administrator

    CLIENTNAME:Console

    TEMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp

    USERDOMAIN:RJ-WEIJIANJUN

    ALLUSERSPROFILE:C:/Documents and Settings/All Users

    lib:C:/Program Files/SQLXML 4.0/bin/

    PROCESSOR_LEVEL:6

    SystemRoot:C:/WINDOWS

    ClusterLog:C:/WINDOWS/Cluster/cluster.log

    APPDATA:C:/Documents and Settings/Administrator/Application Data

    Path:C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Microsoft SQL Server/80/Tools/Binn/;C:/Program Files/Microsoft SQL Server/90/DTS/Binn/;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/Program Files/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin

    JAVA_HOME:C:/Program Files/Java/jdk1.6.0_07

    FP_NO_HOST_CHECK:NO

    PROCESSOR_REVISION:0f0d

    ProgramFiles:C:/Program Files

    下面是property的输出:

    --------------------------------------

    java.runtime.name:Java(TM) 2 Runtime Environment, Standard Edition

    sun.boot.library.path:D:/Program Files/MyEclipse 6.5/jre/bin

    java.vm.version:1.5.0_11-b03

    java.vm.vendor:Sun Microsystems Inc.

    java.vendor.url:http://java.sun.com/

    path.separator:;

    java.vm.name:Java HotSpot(TM) Client VM

    file.encoding.pkg:sun.io

    sun.java.launcher:SUN_STANDARD

    user.country:CN

    sun.os.patch.level:Service Pack 2

    java.vm.specification.name:Java Virtual Machine Specification

    user.dir:D:/dev/eclipse/mye65/workspace/jmx

    java.runtime.version:1.5.0_11-b03

    java.awt.graphicsenv:sun.awt.Win32GraphicsEnvironment

    java.endorsed.dirs:D:/Program Files/MyEclipse 6.5/jre/lib/endorsed

    os.arch:x86

    java.io.tmpdir:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/

    line.separator:

     

    java.vm.specification.vendor:Sun Microsystems Inc.

    user.variant:

    os.name:Windows 2003

    sun.jnu.encoding:GBK

    java.library.path:D:/Program Files/MyEclipse 6.5/jre/bin;.;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Microsoft SQL Server/80/Tools/Binn/;C:/Program Files/Microsoft SQL Server/90/DTS/Binn/;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/Program Files/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin

    java.specification.name:Java Platform API Specification

    java.class.version:49.0

    sun.management.compiler:HotSpot Client Compiler

    os.version:5.2

    user.home:C:/Documents and Settings/Administrator

    user.timezone:Asia/Shanghai

    java.awt.printerjob:sun.awt.windows.WPrinterJob

    file.encoding:GBK

    java.specification.version:1.5

    java.class.path:D:/dev/eclipse/mye65/workspace/jmx/bin;D:/program/lib/jmx/jmxtools.jar;D:/program/lib/log/commons-logging-1.1.1.jar;D:/program/lib/log/log4j-1.2.15.jar;D:/program/lib/registry/registry.jar

    user.name:Administrator

    java.vm.specification.version:1.0

    java.home:D:/Program Files/MyEclipse 6.5/jre

    sun.arch.data.model:32

    user.language:zh

    java.specification.vendor:Sun Microsystems Inc.

    awt.toolkit:sun.awt.windows.WToolkit

    java.vm.info:mixed mode

    java.version:1.5.0_11

    java.ext.dirs:D:/Program Files/MyEclipse 6.5/jre/lib/ext

    sun.boot.class.path:D:/Program Files/MyEclipse 6.5/jre/lib/rt.jar;D:/Program Files/MyEclipse 6.5/jre/lib/i18n.jar;D:/Program Files/MyEclipse 6.5/jre/lib/sunrsasign.jar;D:/Program Files/MyEclipse 6.5/jre/lib/jsse.jar;D:/Program Files/MyEclipse 6.5/jre/lib/jce.jar;D:/Program Files/MyEclipse 6.5/jre/lib/charsets.jar;D:/Program Files/MyEclipse 6.5/jre/classes

    java.vendor:Sun Microsystems Inc.

    file.separator:/

    java.vendor.url.bug:http://java.sun.com/cgi-bin/bugreport.cgi

    sun.io.unicode.encoding:UnicodeLittle

    sun.cpu.endian:little

    sun.desktop:windows

    sun.cpu.isalist:pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

    个人觉得比較重要的系统属性:

    java.homeJava 安装文件夹 (比方D:/JavaStudio/jdk15/jre)
    java.class.path
    Java 类路径
    java.vm.version
    Java虚拟机版本(比方:1.5.0-b64
    java.version
    Java版本(比方:1.5.0)

    os.name:操作系统的名称(比方:Windows XP)
    os.version
    :操作系统的版本号(比方:Windows XP 的版本号为5.1)

    user.home:用户的主文件夹 (比方:C:/Documents and Settings/zhangsan)
    user.name
    :当前username
    user.country
    :当前用户所属国家
    user.dir
    :用户的当前工作文件夹

    比較重要的环境变量(Windows操作系统):

    %COMPUTERNAME%    
    返回计算机的名称。
    %COMSPEC%    
    返回命令行解释器可运行程序的准确路径。

    %WINDIR%    返回操作系统文件夹的位置。
    %OS%    
    返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT
    %PATH%   
    指定可运行文件的搜索路径。

    %USERDOMAIN%    返回包括用户帐户的域的名称。
    %USERNAME%   
    返回当前登录的用户的名称。

    以下是一篇在jdk1.4中得到环境变量的方法:

    Access user defined environment variable inside the java program with jdk1.4

    In JDK 1.4 System.getenv() is deprecated. (In JDK 1.5 it is un-deprected again.) The getProperty method is now the correspoding method to get the variables. For example: System.getProperty("java.class.path",""). But it doesn't work for user defined environment variable. This problem can be solved by using the following code:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;

    /**
    * Environment class simulates the System.getenv() method which is deprecated
    * on java 1.4.2
    *
    * @author v-josp
    */
    public class TestRoot
    {
    //result of all enviornment variables
    private static BufferedReader commandResult;

    static
    {
    String cmd = null;
    String os = null;

    //getting the OS name
    os = System.getProperty("os.name").toLowerCase();

    // according to OS set the command to execute
    if(os.startsWith("windows"))
    {
    cmd = "cmd /c SET";
    }
    else
    {
    cmd="env";
    }

    try
    {
    //execute the command and get the result in the form of InputStream
    Process p = Runtime.getRuntime().exec(cmd);

    //parse the InputStream data
    InputStreamReader isr = new InputStreamReader(p.getInputStream());
    commandResult= new BufferedReader(isr);
    }
    catch (Exception e)
    {
    System.out.println("OSEnvironment.class error: " + cmd + ":" + e);
    }
    }

    /**
    * This method is used to get the path of the given enviornment variable. This
    * method tries to simulates the System.getenv() which is deprecated on java 1.4.2
    *
    * @param String - name of the environment variable
    * @param String - default value
    * @return
    */
    public static String getenv(String envName,String defaultValue)
    {
    String line = null;
    try
    {
    while ((line = commandResult.readLine()) != null)
    {
    if(line.indexOf(envName)>-1)
    {
    return line.substring(line.indexOf(envName)+envName.length()+1);
    }
    }
    return defaultValue;
    }
    catch (Exception e)
    {
    return defaultValue;
    }
    }

    public static void main(String args[])
    {
    System.out.println(TestRoot.getenv("CLASSPATH",""));
    }
    }

  • 相关阅读:
    A query was run and no Result Maps were found for the Mapped Statement 'com.demo.dao.UserDao.check'. It's likely that neither a Result Type nor a Result Map was specified.
    layui监听input内容变动简单粗暴
    Java多线程中
    Java 对象内存分析
    MySQL重做日志
    并查集-Java实现
    java虚拟机类加载机制
    Java的23种设计模式概述
    redo log 有什么作用?
    什么是redo log ?
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3983676.html
Copyright © 2020-2023  润新知