[java] System.getProperty (“java.io.tmpdir”)는 언제“c : \ temp”를 반환합니까?

언제 System.getProperty("java.io.tmpdir")돌아올 지 궁금 합니다 "c:\temp". java.io.File Java Docs 에 따르면 –

기본 임시 파일 디렉토리는 시스템 특성 java.io.tmpdir로 지정됩니다. UNIX 시스템에서이 등록 정보의 기본값은 일반적으로 “/ tmp”또는 “/ var / tmp”입니다. Microsoft Windows 시스템에서는 일반적으로 “c : \ temp”입니다. JVM (Java Virtual Machine)이 호출 될 때이 시스템 특성에 다른 값이 제공 될 수 있지만이 특성에 대한 프로그램 변경 사항이이 메소드에서 사용하는 임시 디렉토리에 영향을 미친다는 보장은 없습니다.

하지만 제 경우에는

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 함수는 다음 순서로 환경 변수의 존재를 확인하고 발견 된 첫 번째 경로를 사용합니다.

  1. TMP 환경 변수로 지정된 경로입니다.
  2. TEMP 환경 변수로 지정된 경로입니다.
  3. USERPROFILE 환경 변수로 지정된 경로입니다.
  4. Windows 디렉토리.

한편, 역사적 이유 TMPTEMP공존 하는 이유 를 확인하시기 바랍니다 . 정말 읽을 가치가 있습니다.


답변

의 값 %TEMP%환경 변수는 종종 사용자 별 및 Windows는 현재 사용자 계정 로그인과 관련을 설정합니다. 일부 사용자 계정 예를 들어, 어떤 사용자 프로파일가 없을 수 있습니다 경우에 서비스로 프로세스 실행 SYSTEM, LOCALSYSTEM또는 다른 계정 내장, 또는으로 AppPool을 정체성으로 IIS 응용 프로그램에 의해 호출되는 사용자 프로필 만들기 비활성화 옵션을 선택합니다. 따라서 %TEMP%변수를 명시 적으로 덮어 쓰지 c:\temp않더라도 Windows는 c:\windows\temp비정상적인 사용자 계정에 대해 또는 심지어 폴더를 사용할 수 있습니다. 더 중요한 것은 프로세스에이 디렉토리에 대한 액세스 권한이 없을 수 있다는 것입니다!


답변