web-dev-qa-db-ja.com

Java.io.tmpdirを制御する環境変数?

TMP環境変数を使用して、gccが一時ファイルを書き込む場所などを制御しましたが、Javaの createTempFile APIに相当するものが見つからないようです。

そのような環境変数は存在しますか?

95
Zach Hirsch

うーん-これはJVMによって処理されるので、OpenJDK VMのソースコードを少し掘り下げ、OpenJDKで行われていることはJava 6以前で行われていることを模倣していると思います。 Windows以外にこれを行う方法があることを安心させるものではありません。

Windows の場合、OpenJDKのget_temp_directory()関数はGetTempPath()へのWin32 API呼び出しを行います。これは、WindowsでJavaがTMP環境変数の値を反映する方法です。

Linux および Solaris では、同じget_temp_directory()関数は/tmp/の静的な値を返します。

実際のJDK6がこれらの厳密な規則に従っているかどうかはわかりませんが、リストされている各プラットフォームでの動作からは、そうなっているようです。

110
delfuego

Java.io.File Java Docs

デフォルトの一時ファイルディレクトリは、システムプロパティJava.io.tmpdirで指定されています。 UNIXシステムでは、このプロパティのデフォルト値は通常「/ tmp」または「/ var/tmp」です。 Microsoft Windowsシステムでは、通常「c:\ temp」です。 Java仮想マシンが呼び出されると、このシステムプロパティに異なる値が与えられる場合がありますが、このプロパティのプログラムによる変更は、このメソッドで使用される一時ディレクトリに影響を与えるとは限りません。

Java.io.tmpdirシステムプロパティを指定するには、次のようにJVMを呼び出すことができます。

Java -Djava.io.tmpdir=/path/to/tmpdir

デフォルトでは、この値はWindowsシステムのTMP環境変数から取得する必要があります

98
Bryan Kyle

_Java_OPTIONS環境変数を設定できます。たとえば、bashの場合、これはトリックを実行します。

export _Java_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

私はそれを私のbashログインスクリプトに入れました、そしてそれはトリックをするようです。

58
John St. John

つかいます

$ Java -XshowSettings
Property settings:
    Java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    Java.io.tmpdir = /tmp
35
Nisar Ahmed

これは環境変数ではありませんが、一時ディレクトリを制御できます:

-Djava.io.tmpdir

例:

Java -Djava.io.tmpdir=/mytempdir
26
Bozho

ここで何が起こっているかを明確にするために:

  • 一時ディレクトリの場所を設定する推奨方法は、「Java.io.tmpdir」というシステムプロパティを設定することです。オプション-Djava.io.tmpdir=/mytempdirJavaコマンドに与えることにより。プロパティは、System.setProperty("Java.io.tmpdir", "/mytempdir) ...モジュロサンドボックスセキュリティの問題を呼び出すことにより、プログラム内から変更することもできます。

  • 起動時に「Java.io.tmpdir」プロパティを明示的に設定しない場合、JVMはそれをプラットフォーム固有デフォルト値に初期化します。 Windowsの場合、デフォルトはWin32 APIメソッドの呼び出しによって取得されます。 Linux/Solarisの場合、デフォルトは明らかにハードワイヤードです。他のJVMの場合は、別の可能性があります。

経験的に、「TMP」環境変数はWindows(現在のJVMを使用)で機能しますが、他のプラットフォームでは機能しません。移植性を重視する場合は、システムプロパティを明示的に設定する必要があります。

16
Stephen C

UNIX端末で以下のコマンドを使用します。

Java -XshowSettings

これにより、すべてのJavaプロパティとシステム設定が表示されます。この外観でJava.io.tmpdir値を探します。

0
suhas