Java System.getProperty 和 System.getenv 区别

Java System.getProperty 和 System.getenv 区别

getProperty and getenv方法是java.lang.System类中两个静态方法,废话少说直接看比较

System.getProperty()

java平台使用Properties 对象去提供本地系统配置信息,我们称为系统属性。系统属性包括当前用户,java运行时的版本,以及文件路径分隔符等。
下面代码中,我们使用System.getProperty(“log_dir”)读取log_dir属性的值,也可以使用缺省值参数,确保如果属性不存在,则返回缺省值。

String log_dir = System.getProperty("log_dir","/tmp/log");

为了在运行时更新系统属性, 使用System.setProperty 方法:

System.setProperty("log_dir", "/tmp/log");

我们也可以使用属性命令行参数方式传递我们属性或配置值给应用程序:

java -jar jarName -DpropertyName=value

给app.jar应用的foo属性设置值为bar:

java -jar app -Dfoo=”bar”

System.getenv()

环境变量与属性类似,也是键值对形式。大多数操作系统使用环境变量,可以把配置信息传递给应用程序。
不同操作系统设置环境变量方式不同,举例,windows使用控制面板中系统程序,而Unix使用shell脚本。当创建一个进程是,缺省其继承其父进程的环境变量副本。

可以调用getenv()方法并指定环境变量名的值:

String log_dir = System.getenv("log_dir");

另外,我们可以从我们的应用中创建另一个进程,此时可以给他环境增加变量。在java可以通过ProcessBuilder 类创建进程,其environment方法返回环境变量Map,但此map不是只读的,我们可以增加相应元素。

ProcessBuilder pb = new ProcessBuilder(args);
Map<String, String> env = pb.environment();
env.put("log_dir", "/tmp/log");
Process process = pb.start();

两者差异

  1. 我们可以在运行时更新属性,环境变量是操作系统变量的不可变副本,不能修改。
  2. 属性仅在java平台中有效,而环境变量是全局的,属于操作系统级——运行在同一台机器上的所有应用都有效。
  3. 当打包应用时属性必须存在,但我们可以在任何时候创建环境变量。

总结

getProperty相当于获取java环境中一个变量的值,而getenv获取的操作系统的环境变量

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值