System.getProperty(“ java.io.tmpdir”)が“ c:\ temp”を返すのはいつですか


110

いつ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
en.wikipedia.org/wiki/Temporary_folder wikiを見ると、C:\Temp%TEMP%を変更するか、Windows 98をインストールするか、またはに渡すことで作成できjava -Djava.io.tmpdir=C:\Tempます。:また、このチェックアウトstackoverflow.com/questions/3437095/...を
bezmax

@MaxありがとうMAX。%TEMP%をに変更するとC:\Temp、になりますC:\Temp。正しい?しかし、ドキュメントのc:\Temp代わりに表示しC:\Tempます。:)
Ashish Pancholi 2013年

2
アプリケーションでドライブ文字が重要である理由がわかりませんか?
ajduke 2013年

@AshishPancholiはあなたをそこに連れて行きませんでしたか?
ajduke

リンクしている1.4.2 Javadocは古くなっています。現在の7つのJavadocは、「典型的な」ディレクトリについて言及しています"C:\\WINNT\\TEMP"
Abdull 2013

回答:


128

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

TEMP環境変数をに変更するとC:\temp、実行時に同じ結果になります。

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


2
Windowsには%TMP%と呼ばれる2番目の環境変数があり、これは%TEMP%ではなく、これが使用されることがあります。たとえば、Eclipse用のGWTプラグインは%TMP%変数を使用します。
Wee Shetland

@女子:あなたの答えはかなり正確です。しかし、私はあなたが与えた例に同意しません:ユーザーがTMP環境変数を設定した場合、それはTEMP無視されます。私の回答を参考にして、私の意味が理解できない場合はお知らせください。
ザカリア2015


33

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

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

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

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.