언제 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 함수는 다음 순서로 환경 변수의 존재를 확인하고 발견 된 첫 번째 경로를 사용합니다.
- TMP 환경 변수로 지정된 경로입니다.
- TEMP 환경 변수로 지정된 경로입니다.
- USERPROFILE 환경 변수로 지정된 경로입니다.
- Windows 디렉토리.
한편, 역사적 이유 TMP
와 TEMP
공존 하는 이유 를 확인하시기 바랍니다 . 정말 읽을 가치가 있습니다.
답변
의 값 %TEMP%
환경 변수는 종종 사용자 별 및 Windows는 현재 사용자 계정 로그인과 관련을 설정합니다. 일부 사용자 계정 예를 들어, 어떤 사용자 프로파일가 없을 수 있습니다 경우에 서비스로 프로세스 실행 SYSTEM
, LOCALSYSTEM
또는 다른 계정 내장, 또는으로 AppPool을 정체성으로 IIS 응용 프로그램에 의해 호출되는 사용자 프로필 만들기 비활성화 옵션을 선택합니다. 따라서 %TEMP%
변수를 명시 적으로 덮어 쓰지 c:\temp
않더라도 Windows는 c:\windows\temp
비정상적인 사용자 계정에 대해 또는 심지어 폴더를 사용할 수 있습니다. 더 중요한 것은 프로세스에이 디렉토리에 대한 액세스 권한이 없을 수 있다는 것입니다!