zoukankan      html  css  js  c++  java
  • System.Properties和System.getenv区别

    网上很多使用的是getProperties。说获得系统变量,但是其实不正确。getProperties中所谓的"system properties"其实是指"java system",而非"operation system",概念完全不同,使用getProperties获得的其实是虚拟机的变量形如: -Djavaxxxx。


    getenv方法才是真正的获得系统环境变量,比如Path之类。其方法命名方式有违Sun命名规范其实。


    意思就是说:希望使用Java的系统变量替代操作系统的变量获取,如果你想访问某个系统的环境变量(operation system properties),请把他重新定义个名字,传给Java的JVM变量(jvm system properties)。要获得系统的环境变量,请使用:


    getenv()方法。


    这才最正确。


    getProperties()
    Determines the current system properties.


    public static Properties getProperties()
     
    Determines the current system properties.
     
    First, if there is a security manager, its checkPropertiesAccess method is called with no arguments. This may result in a security exception.
     
    The current set of system properties for use by the getProperty(String) method is returned as a Properties object. If there is no current set of system properties, a set of system properties is first created and initialized. This set of system properties always includes values for the following keys:
    Key Description of Associated Value
    java.version Java Runtime Environment version
    java.vendor Java Runtime Environment vendor
    java.vendor.url Java vendor URL
    java.home Java installation directory
    java.vm.specification.version Java Virtual Machine specification version
    java.vm.specification.vendor Java Virtual Machine specification vendor
    java.vm.specification.name Java Virtual Machine specification name
    java.vm.version Java Virtual Machine implementation version
    java.vm.vendor Java Virtual Machine implementation vendor
    java.vm.name Java Virtual Machine implementation name
    java.specification.version Java Runtime Environment specification version
    java.specification.vendor Java Runtime Environment specification vendor
    java.specification.name Java Runtime Environment specification name
    java.class.version Java class format version number
    java.class.path Java class path
    java.library.path List of paths to search when loading libraries
    java.io.tmpdir Default temp file path
    java.compiler Name of JIT compiler to use
    java.ext.dirs Path of extension directory or directories
    os.name Operating system name
    os.arch Operating system architecture
    os.version Operating system version
    file.separator File separator ("/" on UNIX)
    path.separator Path separator (":" on UNIX)
    line.separator Line separator (" " on UNIX)
    user.name User's account name
    user.home User's home directory
    user.dir User's current working directory
     
    Multiple paths in a system property value are separated by the path separator character of the platform.
     
    Note that even if the security manager does not permit the getProperties operation, it may choose to permit the getProperty(String) operation.
     
    Returns:
        the system properties
    Throws:
        SecurityException - if a security manager exists and its checkPropertiesAccess method doesn't allow access to the system properties.
    See Also:
        setProperties(java.util.Properties), SecurityException, SecurityManager.checkPropertiesAccess(), Properties


    http://archlord.blog.hexun.com/6949672_d.html
    System可以有对标准输入,标准输出,错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
    System.getProperties()可以确定当前的系统属性,返回值是一个Properties;
    System.load(String filename)等同于:System.getProperties().load(String filename)它们的作用是可以从作为动态库德本地文件系统中指定的文件名加载代码文件。
    System.setProperties(Properties propes):将系统属性设置为Properties参数;
    System.setProperties(String key,String value)等同于System.getProperties().setProperties(String key,String value):设置指定键指示的系统属性


    对于在程序中如果我们想得到一个资源文件中对应的键值对的内容,可以有两种方法:
    1)使用Properties的load方法,将这个文件先加载进来,之后使用getProperty方法将对应键的值得到,比如:
    System.getProperties().load("System.Properties.txt");先加载System.Properties.txt文件
    System.getProperties().getProperty("DBType");后将文件中键为DBType的值得到。
    2)使用第一种方法键对应的值得灵活性比较大。还有一种方法是将不从文件中得到键对应的值。在程序中去设一个属性,比如:
    System.getProperties().setProperty("DBType","SQLServer");先设置一个键位DBType的属性
    System.getProperties().getProperty("DBType");后通过getProperty方法得到DBType的值。


    另外使用Properties.getProperty方法的参数也可以使用系统的一些环境变量,列表如下:
    Key                     Meaning
    -------------------     ------------------------------
    "file.separator"        File separator (e.g., "/")
    "java.class.path"       Java classpath
    "java.class.version"    Java class version number
    "java.home"             Java installation directory
    "java.vendor"           Java vendor-specific string
    "java.vendor.url"       Java vendor URL
    "java.version"          Java version number
    "line.separator"        Line separator
    "os.arch"               Operating system architecture
    "os.name"               Operating system name
    "path.separator"        Path separator (e.g., ":")
    "user.dir"              User's current working directory
    "user.home"             User home directory
    "user.name"             User account name
    使用其中的key可以得到一些属性,供我们在程序中使用
    备注:
    Microsoft VM是WIN32操作环境中的虚拟机,VM一般安装在大多数操作系统下,也包含在多数IE中。
    Microsoft VM存在漏洞允许攻击者对user.dir属性进行访问。user.dir属性包含当前应用程序的工作目录信息,也包含用户名信息,利用这个漏洞可以获得当前用户名称。
    可以利用WEB页和HTML形式邮件来触发。


    System.getenv()
    根据JDK 7中的描述


    Returns an unmodifiable string map view of the current system environment.


    public static Map<String,String> getenv()
     
    Returns an unmodifiable string map view of the current system environment. The environment is a system-dependent mapping from names to values which is passed from parent to child processes.
     
    If the system does not support environment variables, an empty map is returned.
     
    The returned map will never contain null keys or values. Attempting to query the presence of a null key or value will throw a NullPointerException. Attempting to query the presence of a key or value which is not of type String will throw a ClassCastException.
     
    The returned map and its collection views may not obey the general contract of the Object.equals(java.lang.Object) and Object.hashCode() methods.
     
    The returned map is typically case-sensitive on all platforms.
     
    If a security manager exists, its checkPermission method is called with a RuntimePermission("getenv.*") permission. This may result in a SecurityException being thrown.
     
    When passing information to a Java subprocess, system properties are generally preferred over environment variables.
     
    Returns:
        the environment as a map of variable names to values
    Throws:
        SecurityException - if a security manager exists and its checkPermission method doesn't allow access to the process environment
    Since:
        1.5
    See Also:
        getenv(String), ProcessBuilder.environment()

    来源:http://blog.csdn.net/lanwenbing/article/details/40780971

  • 相关阅读:
    flume+kafka (分区实现 默认单分区)
    flume+kafka (分区实现 默认单分区) (二)
    trident 序列号问题
    C#运动控制日志报警记录和操作记录记录查询(SqlLite数据库操作)
    C#运动控制运动暂停思路检测沿信号方法
    C#使用json配置文件方法【读写Json,适合小项目】
    C#NLog日志组件使用
    C#运动控制05实时报警及显示方案
    C#USB扫码枪实现无焦点状态下扫入
    C#运动控制05日志显示(ListView和imageList控件使用)
  • 原文地址:https://www.cnblogs.com/langtianya/p/5308091.html
Copyright © 2011-2022 走看看