System.getProperty("Java.io.tmpdir")
がいつ"c:\temp"
を返すのかという点に興味があります。によると Java.io.FileJava Docs -
デフォルトの一時ファイルディレクトリは、システムプロパティJava.io.tmpdirによって指定されます。 UNIXシステムでは、このプロパティのデフォルト値は通常 "/ tmp"または "/ var/tmp"です。 Microsoft Windowsシステムでは、通常 "c:\ temp"です。 Java仮想マシンが呼び出されたときにこのシステムプロパティに異なる値が与えられることがありますが、このプロパティへのプログラムによる変更がこのメソッドで使用される一時ディレクトリに影響を与えることは保証されていません。
しかし私の場合は
System.out.println(System.getProperty("Java.io.tmpdir"));
常に返品
C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%
どのような条件で"c:\temp"
が返されますか?
編集済み:%TEMP%をC:\ Tempに変更すると、C:\ Tempになります。ただし、ドキュメントにはC:\ Tempではなくc:\ Tempが表示されます。
MS Windowsでは、一時ディレクトリは環境変数TEMP
によって設定されます。 XPでは、一時ディレクトリはユーザごとにLocal Settings\Tempに設定されていました。
TEMP環境変数をC:\temp
に変更すると、実行したときと同じ結果になります。
System.out.println(System.getProperty("Java.io.tmpdir"));
設定した場合
-Djava.io.tmpdir=C:\temp
一方で、System.getProperty("Java.io.tmpdir")
命令を呼び出すと、JavaはWin32 APIの関数GetTempPath
を呼び出します。によると MSDN :
GetTempPath関数は、次の順序で環境変数の存在を確認し、見つかった最初のパスを使用します。
- TMP環境変数で指定されたパス。
- TEMP環境変数で指定されたパス。
- USERPROFILE環境変数で指定されたパス。
- Windowsディレクトリ.
一方、 TMP
とTEMP
が共存する理由の歴史的理由 を確認してください。本当に読む価値があります。
%TEMP%
環境変数の値は多くの場合ユーザー固有であり、Windowsは現在ログインしているユーザーアカウントに関してそれを設定します。たとえば、プロセスがSYSTEM
、LOCALSYSTEM
、またはその他の組み込みアカウントでサービスとして実行されている場合や、AppPool IDを指定してIIS applicationによってCreate)によって呼び出される場合など、一部のユーザーアカウントにユーザープロファイルがありません。ユーザープロファイルオプションが無効になっています。そのため、%TEMP%
変数を明示的に上書きしなくても、Windowsはc:\temp
またはc:\windows\temp
フォルダを使用することがあります。さらに重要なことは、このディレクトリへのアクセス権がプロセスにないことです。