首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Java 取得系統屬性與環境變數完整指南:System.getProperties、getenv、常用鍵值對照表

     編輯:更多程式設計知識

Java 提供兩大標準途徑存取執行環境資訊:System.getProperties() (JVM 系統屬性) 與 System.getenv() (作業系統環境變數)。本文完整列出遍歷程式碼、常用鍵值含義對照表、存取最佳實務與跨平台注意事項。

1. 系統屬性


Properties props = System.getProperties();
for (Map.Entry entry : props.entrySet()) {
    System.out.println(entry.getKey() + " --> " + entry.getValue());
}

// 取單一屬性
String javaHome = System.getProperty("java.home");
String osName = System.getProperty("os.name");
String userDir = System.getProperty("user.dir");

常用系統屬性對照表

2. 環境變數


Map env = System.getenv();
for (Map.Entry entry : env.entrySet()) {
    System.out.println(entry.getKey() + " --> " + entry.getValue());
}

// 取單一變數 (Java 5+)
String path = System.getenv("PATH");
String javaHomeEnv = System.getenv("JAVA_HOME");

常見環境變數對照表

鍵含義範例值
java.versionJRE 版本1.8.0_202
java.homeJRE 安裝目錄C:\Program Files\Java\jre1.8.0_202
java.class.path類別路徑.:/app/lib/*
java.library.path原生庫搜尋路徑/usr/lib:/lib
os.name作業系統名稱Windows 10 / Linux / Mac OS X
os.archOS 架構amd64 / x86 / aarch64
os.versionOS 版本10.0 / 4.15.0-91-generic
user.name當前使用者帳號admin / zhangsan
user.home使用者家目錄C:\Users\admin / /home/zhangsan
user.dir工作目錄 (啟動 JVM 目錄)C:\project / /opt/app
file.encoding預設檔案編碼UTF-8 / GBK / Cp1252
file.separator路徑分隔符\ (Win) / / (Unix)
path.separatorCLASSPATH 分隔符; (Win) / : (Unix)
line.separator換行符\r\n (Win) / \n (Unix)
sun.jnu.encoding檔案系統編碼GBK / UTF-8

3. 系統屬性 vs 環境變數:差異與選擇

變數含義典型值
PATH可執行檔搜尋路徑C:\Windows\system32;C:\Program Files\Java\jdk\bin
JAVA_HOMEJDK 安裝根目錄C:\Program Files\Java\jdk1.8.0_202
CLASSPATHJava 類別路徑 (舊式).;lib\*
TEMP/TMP暫存目錄C:\Users\admin\AppData\Local\Temp
USERPROFILE使用者設定檔根目錄C:\Users\admin
HOMEUnix 家目錄/home/zhangsan
LANG/LC_ALL地區設定zh_CN.UTF-8 / en_US.UTF-8
HOMEDRIVE/HOMEPATHWindows 家目錄分割C: / \Users\admin

4. 最佳實務

  • 配置外部化:啟動腳本用 -Dapp.config=/etc/app/config.yml 傳入,程式碼 System.getProperty("app.config") 讀取。
  • 編碼明確化:啟動加 -Dfile.encoding=UTF-8,避免平台預設編碼差異導致中文亂碼。
  • 路徑用 File.separator:String path = System.getProperty("user.home") + File.separator + ".myapp"。
  • 環境變數作為覆蓋層:String val = System.getProperty("key", System.getenv("KEY")) (Java 8+ getProperty 無預設值多載,需自行判斷)。
  • 安全性:勿在日誌輸出完整 System.getProperties(),可能洩露 java.class.path 內含密鑰路徑等敏感資訊。

5. 完整示例:環境診斷工具類


public final class EnvDiagnostics {
    public static void printSummary() {
        System.out.println("=== JVM System Properties ===");
        printProps(System.getProperties(), Arrays.asList(
            "java.version", "java.home", "java.class.path", "java.library.path",
            "os.name", "os.arch", "os.version",
            "user.name", "user.home", "user.dir",
            "file.encoding", "file.separator", "path.separator", "line.separator"
        ));

        System.out.println("\n=== OS Environment Variables ===");
        printProps(System.getenv(), Arrays.asList(
            "PATH", "JAVA_HOME", "CLASSPATH", "TEMP", "TMP",
            "USERPROFILE", "HOME", "LANG", "LC_ALL"
        ));
    }

    private static void printProps(Map props, Collection keys) {
        for (Object k : keys) {
            Object v = props.get(k);
            System.out.printf("%-30s --> %s%n", k, v != null ? v : "");
        }
    }
}

掌握上述 API 與鍵值對照,即能快速診斷部署環境、編寫跨平台相容的路徑與配置邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度系統屬性環境變數
來源JVM 啟動參數 -Dkey=value、預設值作業系統行程環境區塊
範圍JVM 進程內行程樹繼承 (父進程→子進程)
可變性執行期可修改 System.setProperty唯讀 (Java 無標準 API 修改)
跨平台一致性高 (JVM 定義標準鍵)低 (Windows/Unix 鍵名大小寫、存在性不同)
典型用途應用配置、JVM 診斷、路徑解析外部工具鏈定位、容器配置注入、CI/CD 參數