TMP
環境変数を使用して、gccが一時ファイルを書き込む場所などを制御しましたが、Javaの createTempFile APIに相当するものが見つからないようです。
そのような環境変数は存在しますか?
うーん-これは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がこれらの厳密な規則に従っているかどうかはわかりませんが、リストされている各プラットフォームでの動作からは、そうなっているようです。
デフォルトの一時ファイルディレクトリは、システムプロパティ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
環境変数から取得する必要があります
_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)
...モジュロサンドボックスセキュリティの問題を呼び出すことにより、プログラム内から変更することもできます。
起動時に「Java.io.tmpdir」プロパティを明示的に設定しない場合、JVMはそれをプラットフォーム固有デフォルト値に初期化します。 Windowsの場合、デフォルトはWin32 APIメソッドの呼び出しによって取得されます。 Linux/Solarisの場合、デフォルトは明らかにハードワイヤードです。他のJVMの場合は、別の可能性があります。
経験的に、「TMP」環境変数はWindows(現在のJVMを使用)で機能しますが、他のプラットフォームでは機能しません。移植性を重視する場合は、システムプロパティを明示的に設定する必要があります。
UNIX端末で以下のコマンドを使用します。
Java -XshowSettings
これにより、すべてのJavaプロパティとシステム設定が表示されます。この外観でJava.io.tmpdir
値を探します。