Java 获取属性和环境变量的方法(java获取当前环境编码格式)

createh51周前 (12-30)技术教程11

1.简介

在Java应用程序中,Java将自动导入包java.lang, 包含从NullPointerException到Object,Math和String的许多常用类。

java.lang.System中的类是 final 类,也就是说,我们不能继承它,因此,所有的方法都是静态的。

我们研究读取系统属性和环境变量的两种System方法之间的区别。

这些方法是getProperty和getenv。

2.使用System.getProperty()

Java平台使用Properties对象提供有关本地系统和配置的信息,我们将其称为System Properties。

系统属性包括诸如当前用户,Java运行时的当前版本以及文件路径名分隔符之类的信息。

在下面的代码中,我们使用System.getProperty(“ log_dir”)读取属性log_dir的值。我们还使用默认值参数,因此,如果该属性不存在,则getProperty返回 "/tmp/log":

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

要在运行时更新系统属性,可以使用System.setProperty 方法 (尽量不要使用):

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

我们可以使用propertyName命令行参数将自己的属性或配置值传递给应用程序,格式为

java -jar jarName -DpropertyName=value

在app.jar中将foo的属性设置为bar值:

java -jar app -Dfoo =“ bar”

System.getProperty将始终返回String。

3.使用System.getenv()

环境变量是键/值对和 Properties 一样。许多操作系统使用环境变量来允许将配置信息传递到应用程序中。

设置环境变量的方式因操作系统而异。在Windows中,可以从控制面板使用System Utility应用程序,而在Unix中,可以使用shell脚本。

创建进程时,默认情况下,它会继承其父进程的克隆环境变量。

以下代码段显示了使用lambda表达式打印所有环境变量。

System.getenv().forEach((k, v) -> {
    System.out.println(k + ":" + v);
});

getenv() 返回一个只读Map。尝试向地图添加值会抛出 UnsupportedOperationException。

要获取单个变量,请使用变量名称调用getenv:

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

另一方面,我们可以从应用程序中创建另一个进程,并将新变量添加到其环境中。

要使用Java创建新流程,我们使用ProcessBuilder类,通过 environment 方法可以添加自定义的环境变量

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

4.差异

尽管两者本质上都是为String键提供String值的映射,但让我们看一些区别:

  • 当环境变量是操作系统变量的不可变副本时,我们可以在运行时更新属性。
  • 属性仅包含在Java平台内,而环境变量在操作系统级别是全局的-可供同一计算机上运行的所有应用程序使用。
  • 打包应用程序时,属性必须存在,但是我们几乎可以在任何时候在操作系统上创建环境变量。

5.结论

尽管在概念上相似,但是属性和环境变量的应用都非常不同。

选择哪一个通常是范围的问题。使用环境变量,可以将同一应用程序部署到多台计算机上以运行不同的实例,并且可以在操作系统级别甚至在云控制台中进行配置。无需重建应用程序即可更新配置。

始终记住,getProperty遵循驼峰式约定,而getenv则不遵循。


相关文章

Java 中获取文件路径的方式,你知道几种?

1. 前言Java 开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2. 文件的路径文件的路径通常有 相对路径 与 绝对路径。2.1 相对路...

java获取文件路径(java如何获取文件路径)

1. 前言Java 开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2. 文件的路径文件的路径通常有 相对路径 与 绝对路径。2.1 相对路...

java获取文件路径最好的方式(java 获取文件地址)

在开发中,我们经常要去获取文件的路径,那么什么样的方式才是最好的呢? 那就是移植性,不能换了一个软件,或者换了一个系统就需要修改获取文件路径的源码,所以今天我们就来看下这种获取文件路径的方式:注意:这...

Java路径-31-Java数据结构(java数据结构详解)

1 枚举(Enumeration)1.1 Enumeration源码:public interface Enumeration<E> { boolean hasMoreEleme...

几种获取resources目录下的文件方式

前言一般我们的配置信息默认都是会配置在/src/main/resources/application.properties(或者application.yml)文件中,当然,也可以在resources...

「JAVA」三种方式加载本地资源文件:绝对路径、类路径、当前路径

三种方式加载本地资源文件:绝对路径、类路径、当前路径,本文以"db.properties"资源文件为例,分别介绍三种加载本地资源文件的方式。加载properties文件时,使用的是Pr...