如何从Java设置系统变量?

时间:2012-06-19 12:30:26

标签: java

我需要在程序中设置某些系统变量。我的Google fu在找不到任何办法让我失望。我该怎么做? (我可以使用hacky方法。我需要能够在Windows,Linux和Mac上运行此应用程序。)

修改

在这里添加我的评论,因为在那里不容易看到:

  

我能找到的最佳链接是this,它只在内存中设置变量。程序退出后它们不会持续存在。

修改

我正在编写安装程序,需要以某种方式在系统级别记录安装发生的情况(以及某些目录的路径)。下次用户运行设置时,安装程​​序将检查系统中是否已存在变量,在这种情况下,将向用户发出适当的警告。

如果对环境变量进行调整并不是一个好主意,那么实现上述目标的最佳方法是什么?

6 个答案:

答案 0 :(得分:2)

如果您希望在程序结束后环境变量保持不变,我建议您使用Properties类。它可以很容易地保存到文件中,反之亦然。

答案 1 :(得分:2)

使用 以下系统类方法

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

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

了解更多详情

http://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CF8QFjAA&url=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2Ftutorial%2Fessential%2Fenvironment%2Fsysprop.html&ei=oHLgT6agKcborAf_3L3-DA&usg=AFQjCNGWSWRjk3ityPQqreuwx_O7Bp7kdg&sig2=Y1tfYzdXAmNX-hpB8Z64kw

答案 2 :(得分:1)

首先,Properties是一个java类,用于保存程序可能需要的属性。您正在谈论的基本属性由操作系统提供。并非所有这些都可以改变。如果您尝试,您将获得SecutrityException(例如,您无法更改os.name)。从计算机的内存中读取基本属性(基本上),您可以通过在您使用的操作系统中设置环境变量来为此添加其他变量。比如在Win95中你可以添加到autoexec.bat行: 设置BARTENDER_NAME =卡尔 此行可以放入任何批处理文件中,BARTENDER_NAME将等同于Carl,直到您重置为止。 在您的java程序中如果添加该行 的System.out.println(System.getProperty(" BARTEDER_NAME&#34)); 你将Carl作为输出。 在Linux或Unix上的bash shell中你可以使用 BARTENDER_NAME =卡尔 导出BARTENDER_NAME

您可以为java程序创建自己的属性集,并将它们存储在文件中,并使用Properties load()方法加载它们。 希望这有帮助

来自

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

答案 3 :(得分:0)

好的,这是我的头脑,所以它非常hacky和东西。

获取进程并运行将设置系统变量的命令行命令。这不是便携式的,但它应该足够短期,直到找到更好的解决方案。

答案 4 :(得分:0)

因为没有标准解决方案,我建议您使用工厂模式。它意味着:

envManager = null

if系统为Windows

  `envManager = WindowsEnvManager`

else if系统为Linux

  `envManager = LinuxEnvManager`

else if系统为Mac

  `envManager = macEnvManager`

persistEnvironment(envManager);

并且persistEnvironment方法会调用EnvManager上的特定函数。

答案 5 :(得分: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上,首选项将存储在/etc/.java/.systemPrefs/com/stackoverflow/Q11100967/的{​​{1}}文件中,其中包含以下内容:

prefs.xml