Java获取环境变量和运行时环境信息和自定义配置信息

System.getenv() 获取系统环境变量


public static void main1() {
        Map<String, String> envMap = System.getenv();
        envMap.entrySet().forEach(x-> System.out.println(x.getKey() + "=" + x.getValue()));
}

System.getenv() 获取的是操作系统环境变量列表,如下:

 也可以使用System.getenv("环境变量名称")的方式单独获取某一个具体环境变量的值。

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

  • COMPUTERNAME     返回计算机的名称。
  • COMSPEC     返回命令行解释器可运行程序的准确路径。
  • WINDIR    返回操作系统文件夹的位置。
  • OS     返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
  • PATH    指定可运行文件的搜索路径。
  • USERDOMAIN    返回包括用户帐户的域的名称。
  • USERNAME    返回当前登录的用户的名称。

System.getProperties()获取运行时环境变量

public static void main2() {
        Properties props = System.getProperties();
        props.list(System.out);
}

部分运行时环境信息摘要如下:

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\Java\jdk1.8.0_172\jre\bin
java.vm.version=25.172-b11
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=D:\bench-cluster\spring_in_action_ecl...
java.runtime.version=1.8.0_172-b11
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\Java\jdk1.8.0_172\jre\lib\endorsed
os.arch=amd64
java.io.tmpdir=C:\Users\zhangsan\AppData\Local\Temp\
line.separator=
 
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 10
sun.jnu.encoding=GBK
java.library.path=D:\Java\jdk1.8.0_172\bin;C:\WINDOWS\S...
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.0
user.home=C:\Users\zhangsan
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
user.name=zhangsan
java.class.path=D:\Java\jdk1.8.0_172\jre\lib\charsets...
java.vm.specification.version=1.8
sun.arch.data.model=64
java.home=D:\Java\jdk1.8.0_172\jre
sun.java.command=com.swjtu.mybatis.main.Main2
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_172
java.ext.dirs=D:\Java\jdk1.8.0_172\jre\lib\ext;C:\W...
sun.boot.class.path=D:\Java\jdk1.8.0_172\jre\lib\resource...
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64zheshi 

也可以通过System.getProperty("属性名称")来获取某个具体的属性内容,或者System.getProperties方法的返回值是一个Properties对象,可以使用getProperty("属性名称")来获取某个具体的属性内容。

Properties properties = System.getProperties();
String p1 = properties.getProperty("user.dir");
System.out.println(p1);
String p2 = System.getProperty("file.encoding");
System.out.println(p2);

几个比较常用的属性是:

  • java.home:Java 安装文件夹 (例如: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 10)
  • os.version:操作系统的版本号(例如:10.0)
  • user.home:用户的主文件夹 (例如:C:/Users/piglite)
  • user.name:当前用户名
  • user.country:当前所属国家
  • user.dir:当前Java文件运行时的工作文件夹
  • file.separator:文件路径分隔符
  • file.encoding:文件编码

其中 file.encoding 可以通过jvm运行时参数指定, vm 参数如下:

-Dfile.encoding=UTF-8 

在IDEA中处理TOMCAT启动乱码时,经常会采用这种设置方式。

自定义配置信息

做JDBC编程时习惯性的把driver, url, user和password提取到配置文件中。配置文件放的位置不一样,采用的读取方式也有所不同:

放在包中

放在包中的properties文件会随着项目一起编译(类似于maven的resources文件夹中配置文件的处理方式)。这点可以通过IDEA的out文件夹进行确认:

 

读取该配置文件时可以使用ResourceBundel也可以使用Properties。

使用ResourceBundle
ResourceBundle bundle = ResourceBundle.getBundle("config/config");
String url = bundle.getString("url");
System.out.println(url);

 getBundle读取默认安装项目编译后的路径进行读取,它可以省略配置文件的扩展名,整体写法比Properties要简单一些。

使用Properties

使用Properties的关键是获取配置文件流的方式。可以使用ClassLoader和FileInputStream,两者的差异在于ClassLooder的路径是项目编译后目标文件的路径,而FileInputStream的路径是文件在操作系统中保存的路径。

ClassLoader

Properties properties = new Properties();
InputStream stream = ClassLoader.getSystemResourceAsStream("config/config.properties");
properties.load(stream);
String url = properties.getProperty("url");
System.out.println(url);

FileInputStream

Properties properties = new Properties();
String path = System.getProperty("user.dir")+"/out/production/myJdbc/config/config.properties";
properties.load(new FileInputStream(path));
String url = properties.getProperty("url");
System.out.println(url);

使用ClassLoader显然更便捷一些。

放在项目根目录或者其它文件夹中

但是对于配置文件而言,显然放在项目根目录或者用户目录下修改起来更方便。例如:mydb.properties

放在这个位置的配置文件是不会随着项目一起编译的(同样可以out文件夹下内容进行验证),因此读取这个位置的配置文件信息只能依靠Properties+FileInputStream来读取了:

Properties properties = new Properties();
String path = System.getProperty("user.dir")+"/mydb.properties";
properties.load(new FileInputStream(path));
String url = properties.getProperty("url");
System.out.println(url);

最后,如果觉得将数据库用户名、密码、数据库URL等信息写在配置文件中不太妥当,完全可以把配置信息写在运行程序的系统环境变量中,通过前面介绍的System.getenv()的方式进行读取。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一: Java编程基础 (1) 配置环境变量,熟悉编程环境。 (2) 建立一个Java的Application程序,编译、运行以下例题: public class ex01 { public static void main( String arg[ ]) { System.out.println(“hello!”); } } 实验二:流程控制 (1) 编程输出100以内的奇数。 (2) 编程输出乘法表。 (3) 编写程序,定义一个一维数组并赋有初值,同时找出一维数组中的最大值和最小值并输出。 实验三:类和对象 (1) 设计一个User类,其中包括用户名、口令等属性以及构造方法(至少重载2个)、获取和设置口令的方法、显示和修改用户名的方法等。编写应用程序测试User类。 (2) 定义一个Student类,其中包括学号、姓名、性别、出生年月等属性以及init( )——初始化各属性、display( )——显示各属性、modify( )¬——修改姓名等方法。实现并测试这个类。 (3) 从上题的Student类中派生出Graduate(研究生)类,添加属性:专业subject、导师adviser。重载相应的成员方法。并测试这个类。 实验四:类的继承 (1) 定义一个Animal类,其中包括昵称、性别、体重属性,构造函数初始化各属性,显示各属性的成员函数、修改属性的成员函数。实现并测试这个类。 (2) 从上题的类中派生出Dog类,添加年龄属性。重载相应的成员方法,并添加新的方法bark(),输出“wangwangwang”。并测试这个类。 实验五:接口 (1) 定义一个接口Inf,含有常量π和一个实现计算功能的方法calculate( ),再分别定义一个面积类area和一个周长类circumference,各自按计算圆面积和圆周长具体实现接口中的方法,并以半径为5来测试这两个类。 (2) 定义一个接口run(),汽车类和卡车类分别实现这个类,汽车类实现这个接口输出的是“汽车在跑”,卡车类输出的是“卡车在跑”,丰富这两个类,在主程序中测试。 实验六:异常处理 (1) 定义一个类,在main方法的try块中产生并抛出一个异常,在catch块中捕获异常,并输出相应信息,同时加入finally子句,输出信息,证明它的无条件执行。 (2) *定义一个类Caculate实现10以内的整数加减法的计算。自定义一个异常类NumberRangeException,当试图进行超范围运算时,产生相应的信息。编写应用程序进行测试。 实验七:图形界面编程 (1) 在窗体上产生一个单文本框和两个命令按纽:“显示”和“清除”。当用户单击“显示”按纽时,在文本框中显示“Java 程序”字样;单击“清除”按纽时清空文本框。 (2)设计如下界面: 当用户输入了两个操作数并点击运算种类按纽后,在运算结果对应的文本框中显示运算结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值