環境変数を使用してTMP
、gcc が一時ファイルに書き込む場所などを制御しましたが、Java のcreateTempFile API に相当するものを見つけることができないようです。
そのような環境変数は存在しますか?
環境変数を使用してTMP
、gcc が一時ファイルに書き込む場所などを制御しましたが、Java のcreateTempFile API に相当するものを見つけることができないようです。
そのような環境変数は存在しますか?
デフォルトの一時ファイル ディレクトリは、システム プロパティ java.io.tmpdir によって指定されます。UNIX システムでは、このプロパティーのデフォルト値は通常、「/tmp」または「/var/tmp」です。Microsoft Windows システムでは、通常は「c:\temp」です。Java 仮想マシンが呼び出されたときに、このシステム プロパティに別の値が指定される場合がありますが、このプロパティに対するプログラムによる変更が、このメソッドで使用される一時ディレクトリに影響を与えることは保証されていません。
System プロパティを指定するにはjava.io.tmpdir
、次のように JVM を呼び出します。
java -Djava.io.tmpdir=/path/to/tmpdir
デフォルトでは、この値はTMP
Windows システムの環境変数から取得する必要があります。
うーん-これはJVMによって処理されるので、OpenJDKによって行われることはJava6以前によって行われることを模倣しているのではないかと考えてOpenJDKVMソースコードを少し掘り下げました。Windows以外でこれを行う方法があることは安心ではありません。
Windowsでは、OpenJDKの関数は;へget_temp_directory()
のWin32API呼び出しを行います。これは、Windowsでは、Javaが環境変数GetTempPath()
の値を反映する方法です。TMP
LinuxとSolarisでは、同じ関数が静的な値.を返します。get_temp_directory()
/tmp/
実際のJDK6がこれらの正確な規則に従っているかどうかはわかりませんが、リストされている各プラットフォームでの動作から、それらが準拠しているように見えます。
_JAVA_OPTIONS
環境変数を設定できます。たとえば、bash では次のようにします。
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
それを私のbashログインスクリプトに入れましたが、それはうまくいくようです。
使用する
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
これは環境変数ではありませんが、一時ディレクトリを制御できます。
-Djava.io.tmpdir
元。:
java -Djava.io.tmpdir=/mytempdir
ここで何が起こっているのかを明確にするために:
一時ディレクトリの場所を設定するための推奨される方法は、「java.io.tmpdir」というシステムプロパティを設定することです。たとえば-Djava.io.tmpdir=/mytempdir
、コマンドにオプションを指定しますjava
。System.setProperty("java.io.tmpdir", "/mytempdir)
プロパティは、 ... modulo sandboxsecurityissuesを呼び出すことによってプログラム内から変更することもできます。
起動時に「java.io.tmpdir」プロパティを明示的に設定しない場合、JVMはそれをプラットフォーム固有のデフォルト値に初期化します。Windowsの場合、デフォルトはWin32APIメソッドの呼び出しによって取得されます。Linux / Solarisの場合、デフォルトは明らかにハードワイヤードです。他のJVMの場合、それは別のものである可能性があります。
経験的に、「TMP」環境変数はWindows(現在のJVMを使用)では機能しますが、他のプラットフォームでは機能しません。移植性が気になる場合は、システムプロパティを明示的に設定する必要があります。