5

プログラム内から特定のシステム変数を設定する必要があります。私のGoogle fuは、それを行う方法を見つけるのに失敗しています。どうすればいいのですか?(ハッキーなアプローチは問題ありません。Windows、Linux、および Mac でこのアプリを実行できる必要があります。)

編集:

投稿の下からコメントを追加します。そこには簡単に表示されないためです。

私が見つけた最良のリンクはこれで、変数はメモリ内にのみ設定されます。プログラムの終了後は保持されません。

編集:

私はインストーラーを作成しており、システム レベルでインストールが行われたことを何らかの方法で記録する必要があります (いくつかのディレクトリへのパスと共に)。次回ユーザーがセットアップを実行するときに、インストーラーは変数がシステムに既に存在するかどうかを確認します。その場合、ユーザーには適切な警告が表示されます。

環境変数をいじるのは良い考えではない場合、上記を達成するための最良のアプローチは何ですか?

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 クラスです。あなたが話している基本的なプロパティは、オペレーティング システムによって提供されます。これらすべてを変更できるわけではありません。試行すると、SecutrityException が発生します (たとえば、os.name を変更することはできません)。基本的なプロパティはコンピュータのメモリから読み込まれます (基本的に) 使用しているオペレーティング システムで環境変数を設定することにより、これに追加の変数を追加できます。Win95 のように、次の行を autoexec.bat に追加できます。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

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 に答える
0

これは私の頭のてっぺんから外れているので、非常にハッキーなものです。

プロセスを取得し、システム変数を設定するコマンド ライン コマンドを実行します。これは移植性がありませんが、より良い解決策が見つかるまで、短期的には十分です。

于 2012-06-19T12:39:53.070 に答える
0

これには標準的な解決策がないため、Factory パターンを使用することをお勧めします。次のような意味です。

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 に答える