2012-06-19 86 views
4

我需要在程序中設置某些系統變量。我的Google fu沒有找到任何方法來解決問題。我該怎麼做? (我沒關係與哈克的方法,我需要能夠運行在Windows,Linux和Mac這個程序。)如何從Java設置系統變量?

編輯:

這裏添加從帖子下面我的意見,因爲它不是「T容易看到的有:

我能找到的最好的鏈接是this,並將其設置的變量只在內存。程序退出後,他們不會堅持。

編輯:

我寫一個安裝程序,需要在制度層面以某種方式記錄下安裝發生(與路徑一些目錄一起)。用戶下一次運行設置時,安裝程​​序將檢查系統中是否存在變量,在這種情況下,將向用戶發出適當的警告。

如果與環境變量混合不是一個好主意,那麼實現上述目標的最佳方法是什麼?

+0

你要哪一個系統變量設置? –

+0

你谷芙非常虛弱,徒弟。 –

+0

@Hans,它們是自定義變量,特定於我的應用程序。 – missingfaktor

回答

2

如果你希望你的環境變量在你的程序結束後保持不變,我建議你使用Properties類。它可以很容易地保存到文件中,反之亦然。

0

好吧,這是我的頭頂,所以它是非常hacky和東西。

獲取一個進程並運行命令行命令來設置系統變量。這不是可移植的,但它應該足夠短期,直到你找到更好的解決方案。有關詳細信息,系統類

// Get a system property 
String dir = System.getProperty("user.dir"); 

// Set a system property 
String previousValue = System.setProperty("application.property", "newValue"); 

+0

這不會持續變量。請參閱編輯我的問題。 – missingfaktor

1
+0

程序退出後更改是否仍然存在? – missingfaktor

+0

不,他們不,他們不應該!這將是非常邪惡的。 –

+0

@ Michael-O,請檢查編輯。 – missingfaktor

0

因爲沒有這個標準的解決方案,我會建議你使用工廠模式爲了這。這意味着類似:

envManager = null

if系統是Windows

`envManager = WindowsEnvManager` 

else if系統Linux

`envManager = LinuxEnvManager` 

else if系統Mac

`envManager = macEnvManager` 

persistEnvironment(envManager);

persistEnvironment方法將調用上EnvManager的特定功能。

+0

您似乎誤解了這個問題。這不是一個架構/設計問題。我感興趣的是我如何實現這些'XEnvManager's,'persistEnvironment'等。 – missingfaktor

+1

在Unix中,您可以簡單地更改/ etc/profile。在Windows中... –

0

如何使用Java Preferences API。如果您在Windows上運行,那麼您將這種數據存儲在註冊表中。簡單的教程here

您可以存儲每個系統或每個用戶的首選項,並且您的願望也可以保持不變。


編輯

例子:

package com.stackoverflow.Q11100967; 

import java.util.prefs.Preferences; 

/** 
* @author maba, 2012-06-20 
*/ 
public class App { 

    public static void main(String[] args) { 
     Preferences preferences = Preferences.systemNodeForPackage(App.class); 

     if (!preferences.getBoolean("installed", false)) { 
      // Install the stuff... 
      preferences.putBoolean("installed", true); 
      preferences.put("version", "1.2.3"); 
     } 
    } 
} 

在Windows上的偏好將被存儲在HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Prefs/com/stackoverflow/Q11100967

爲了使這個工作,你必須以管理員權限或類似的方式運行你的過程。


EDIT2

在Linux上的喜好會在一個名爲prefs.xml有以下內容的文件存放在/etc/.java/.systemPrefs/com/stackoverflow/Q11100967/

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE map SYSTEM "http://java.sun.com/dtd/preferences.dtd"> 
<map MAP_XML_VERSION="1.0"> 
    <entry key="installed" value="true"/> 
    <entry key="version" value="1.2.3"/> 
</map> 
1

首先,地產是一個Java類,用於保存您的程序可能需要的屬性。您正在討論的基本屬性由操作系統提供。並非所有這些都可以改變。如果你嘗試,你會得到一個SecutrityException(例如你不能改變os.name)。基本屬性是從計算機內存中讀取的(基本上),您可以通過在所使用的操作系統中設置環境變量來爲此添加其他變量。如在Win95中,您可以添加到autoexec.bat行: 設置BARTENDER_NAME = Carl 此行可以在任何批處理文件中執行,BARTENDER_NAME將等於Carl,直到您將其重置爲止。 在您的Java程序中如果添加行 System.out.println(System.getProperty(「BARTEDER_NAME」)); 你會得到卡爾作爲輸出。 在Linux或Unix你會使用 BARTENDER_NAME =卡爾 出口BARTENDER_NAME bash shell的

你可以創建你自己的屬性集爲您的Java程序,並將它們存儲在一個文件中,並使用屬性負荷加載它們( ) 方法。 希望這有助於

http://www.coderanch.com/t/387634/java/java/Permanently-setting-System-property

相關問題