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"입니다. 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가 표시됩니다.


4
en.wikipedia.org/wiki/Temporary_folder 위키를 보면 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

2
응용 프로그램에서 드라이브 문자가 중요한 이유를 모르겠습니까?
ajduke 2013 년

트윗 담아 가기
ajduke 2013 년

연결하려는 1.4.2 Javadoc이 오래되었습니다. 현재 7 개의 Javadoc 은의 "일반적인"디렉토리를 언급합니다 "C:\\WINNT\\TEMP".
Abdull 2013-08-05

답변:


128

MS Windows에서 임시 디렉토리는 환경 변수에 의해 설정됩니다 TEMP. XP에서 임시 디렉토리는 사용자별로 Local Settings \ Temp로 설정되었습니다.

TEMP 환경 변수를로 변경 C:\temp하면 다음을 실행할 때 동일한 결과를 얻습니다.

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


2
Windows에는 % TMP %라는 두 번째 환경 변수가 있으며이 변수는 % TEMP %가 아닌 때때로 사용됩니다. 예를 들어 Eclipse 용 GWT 플러그인은 % TMP % 변수를 사용합니다.
Wee Shetland

@Joshi : 당신의 대답은 꽤 정확합니다. 그러나 나는 당신이 준 예에 동의하지 않습니다 : 사용자가 TMPenv var를 설정 하면는 TEMP무시됩니다. 내 대답을 참조하고 내가 의미하는 바를 이해하지 못했다면 알려주십시오.
Zakaria 2015


33

한편으로 System.getProperty("java.io.tmpdir")명령을 호출하면 Java가 Win32 API의 함수를 호출합니다 GetTempPath. MSDN 에 따르면 :

GetTempPath 함수는 다음 순서로 환경 변수의 존재를 확인하고 발견 된 첫 번째 경로를 사용합니다.

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

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


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.