120

いつSystem.getProperty("java.io.tmpdir")戻ってくるのか気になります"c:\temp"java.io.File Java 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 が示されています。

4

4 に答える 4

139

MS Windows では、一時ディレクトリは環境変数によって設定されますTEMP。XP では、一時ディレクトリはユーザーごとに Local Settings\Temp として設定されていました。

TEMP 環境変数を に変更すると、次のコマンドC:\tempを実行すると同じ結果が得られます。

System.out.println(System.getProperty("java.io.tmpdir"));

于 2013-05-03T05:50:07.567 に答える
41

設定した場合

-Djava.io.tmpdir=C:\temp
于 2013-05-03T05:47:23.487 に答える
38

一方、System.getProperty("java.io.tmpdir")命令を呼び出すと、Java は Win32 API の関数を呼び出しますGetTempPathMSDNによると:

GetTempPath 関数は、次の順序で環境変数の存在を確認し、最初に見つかったパスを使用します。

  1. TMP 環境変数で指定されたパス。
  2. TEMP 環境変数で指定されたパス。
  3. USERPROFILE 環境変数で指定されたパス。
  4. Windows ディレクトリ。

一方、共存する理由については、歴史的な理由を確認くださいTMPTEMP。本当に読む価値があります。

于 2015-04-18T11:40:30.687 に答える
0

多くの場合、環境変数の値%TEMP%はユーザー固有であり、Windows は現在ログインしているユーザー アカウントに関して設定します。一部のユーザー アカウントにはユーザー プロファイルがない場合があります。たとえば、プロセスがやその他のビルトイン アカウントでサービスとして実行される場合や、[ユーザー プロファイルの作成] オプションが無効になっている AppPool ID を使用して IIS アプリケーションによってプロセスが呼び出される場合SYSTEMなどです。そのため、変数を明示的に上書きしない場合でも、Windows は通常とは異なるユーザー アカウントに対して、またはフォルダーを使用する場合があります。さらに重要なのは、プロセスがこのディレクトリへのアクセス権を持っていない可能性があることです!LOCALSYSTEM%TEMP%c:\tempc:\windows\temp

于 2016-10-27T11:36:22.493 に答える