5

我需要从程序中设置某些系统变量。我的谷歌 fu 让我无法找到任何方法来做到这一点。我该怎么做?(我可以接受 hacky 方法。我需要能够在 Windows、Linux 和 Mac 上运行这个应用程序。)

编辑:

在此处添加我在帖子下方的评论,因为那里不容易看到:

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

编辑:

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

如果玩弄环境变量不是一个好主意,那么实现上述目标的最佳方法是什么?

4

6 回答 6

3

使用系统类的以下方法

// 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

于 2012-06-19T12:40:22.803 回答
2

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

于 2012-06-19T12:36:03.677 回答
1

首先,Properties 是一个 java 类,用于保存您的程序可能需要的属性。您所说的基本属性是由操作系统提供的。并非所有这些都可以更改。如果您尝试,您将得到一个 SecurrityException(例如,您不能更改 os.name)。基本属性是从计算机的内存中读取的(基本上),您可以通过在您使用的操作系统中设置环境变量来添加其他变量。例如在 Win95 中,您可以在 autoexec.bat 中添加以下行: set BARTENDER_NAME=Carl 此行可以放在任何批处理文件中,并且 BARTENDER_NAME 将等于 Carl,直到您重置它。在你的 java 程序中如果你添加行 System.out.println(System.getProperty("BARTEDER_NAME")); 您将得到 Carl 作为输出。

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

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

于 2012-06-19T13:27:52.177 回答
0

好的,这不在我的脑海中,所以它非常hacky和东西。

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

于 2012-06-19T12:39:53.070 回答
0

因为没有标准的解决方案,所以我建议您为此使用工厂模式。它的意思是:

envManager = null

if系统是Windows

  `envManager = WindowsEnvManager`

else if系统是Linux

  `envManager = LinuxEnvManager`

else if系统是Mac

  `envManager = macEnvManager`

persistEnvironment(envManager);

并且该persistEnvironment方法将调用EnvManager.

于 2012-06-19T12:52:32.053 回答
0

使用Java Preferences API怎么样。这样,如果您在 Windows 上运行,您可以将此类数据存储在注册表中。简单教程在这里

您可以存储每个系统或每个用户的偏好,并且偏好是持久的,就像您想要的一样。


编辑

例子:

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.

为了使其工作,您必须以管理员权限或类似方法运行您的进程。


编辑2

在 Linux 上,首选项将存储/etc/.java/.systemPrefs/com/stackoverflow/Q11100967/在一个名为prefs.xml以下内​​容的文件中:

<?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>
于 2012-06-19T13:27:46.573 回答