2

使用 J2SE 1.4 时,在 Windows 中获取环境变量值的最佳/万无一失的方法是什么?

4

6 回答 6

7

您可以使用 getEnv() 获取环境变量:

String variable = System.getenv("WINDIR");  
System.out.println(variable);  

我相信 getEnv() 函数在某个时候被弃用,但后来在 java 1.5 中“不被弃用”

预计到达时间:

我看到这个问题现在专门针对 java 1.4,所以这对你不起作用(或者至少你最终可能会收到弃用警告)。我会在此处留下答案,以防其他人偶然发现此问题并使用更高版本。

于 2009-06-26T11:45:25.810 回答
4

为此可以切换到 JVM。从这里

使用“-D”开关启动 JVM 以将属性传递给应用程序并使用 System.getProperty() 方法读取它们。

SET myvar=Hello world
SET myothervar=nothing
java -Dmyvar="%myvar%" -Dmyothervar="%myothervar%" myClass

然后在 myClass

String myvar = System.getProperty("myvar");
String myothervar = System.getProperty("myothervar");
于 2009-06-26T11:45:10.490 回答
1

您绝对无法从 java API 直接访问环境变量。使用 Runtime.exec 使用这样的代码实现这一目标的唯一方法:

Process p = null;
Runtime r = Runtime.getRuntime();
String OS = System.getProperty("os.name").toLowerCase();
// System.out.println(OS);
if (OS.indexOf("windows 9") > -1) {
  p = r.exec( "command.com /c set" );
}
else if ( (OS.indexOf("nt") > -1)
       || (OS.indexOf("windows 2000") > -1 )
       || (OS.indexOf("windows xp") > -1) ) {
  // thanks to JuanFran for the xp fix!
  p = r.exec( "cmd.exe /c set" );
}

尽管您可以通过 System.getProperties() 访问 Java 变量;但是您只会获得一些由 JVM 本身映射的环境变量,以及您可以在 java 命令行上使用“-Dkey=value”提供的其他数据

有关详细信息,请参阅http://www.rgagnon.com/javadetails/java-0150.html

于 2009-06-26T11:42:49.670 回答
1

将它们作为 -D 系统属性传递到 JVM,例如:

java -D<java var>=%<environment var>%

这样你就不会被绑定到特定的操作系统。

于 2009-06-26T11:44:43.847 回答
0
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
     System.out.format("%s=%s%n", envName, env.get(envName));
}
于 2012-05-11T01:04:44.153 回答
0

Apache Commons Exec 通过“org.apache.commons.exec.environment.EnvironmentUtils”提供了一种获取 JDK 1.5 之前的环境变量的方法:

(String) EnvironmentUtils.getProcEnvironment().get("SOME_ENV_VAR")
于 2014-11-26T12:01:48.310 回答