java.io.tmpdir을 제어하는 ​​환경 변수?


109

TMP환경 변수를 사용하여 gcc가 임시 파일을 작성하는 위치와 같은 것을 제어했지만 Java의 createTempFile API에 해당하는 것을 찾을 수없는 것 같습니다 .

그러한 환경 변수가 존재합니까?


실제 링크는 java.sun.com/javase/6/docs/api/java/io/… , java.lang.String, java.io.File입니다. (또는 괄호를 % 28 및 % 29로 바꿀 때). 짧은 URL을 사용하는 것이 좋지 않다는 것을 알고 있지만 링크가 전혀없는 것보다 낫다고 생각했습니다.
Zach Hirsch

링크를 수정했습니다. 그래서 옳은 일을 잘합니다.
rmeador

1
감사. 트릭도 공백을 % 20으로 바꾸는 것 같아요
Zach Hirsch

1
내가 한 것은 링크를 따라 가서 내 브라우저의 주소 표시 줄에서 URL을 복사 한 다음 짧은 링크가있는 게시물에 붙여 넣는 것뿐이었습니다.
rmeador

답변:


118

흠-이것은 JVM에서 처리하기 때문에 OpenJDK가 수행 한 작업이 Java 6 및 이전 버전에서 수행 된 작업을 모방 할 수 있다고 생각하면서 OpenJDK VM 소스 코드를 조금 탐구했습니다. Windows 이외의 다른 방법이 있다는 것은 안심할 수 없습니다.

윈도우 , 오픈 JDK의 get_temp_directory()함수는 Win32 API를 호출에한다 GetTempPath(); 이것은 Windows에서 Java가 TMP환경 변수 의 값을 반영하는 방법입니다 .

리눅스솔라리스 , 같은 get_temp_directory()기능의 정적 값을 반환합니다 /tmp/.

실제 JDK6이 이러한 정확한 규칙을 따르는지는 모르겠지만 나열된 각 플랫폼의 동작에 따라 그렇게하는 것처럼 보입니다.


38
명확하게 말하면 JVM이 시스템 속성 개체를 만들 때 "java.io.tmpdir"속성에 대한 기본값 을 제공하는 네이티브 코드를보고 있습니다. 이것은 (예를 들어) "-Djava.io.tmpdir = ..."옵션에 의해 무시됩니다.
Stephen C

6
@StephenC, 네, 그게 요점입니다 .OP는 속성을 직접 설정하지 않고 ( -Djava.io.tmpdirJVM에 대한 명령 줄 옵션을 통해) 속성의 기본값이 설정되는 방법 과 해당 기본값이 영향을 받는지 찾고 있었습니다. 모두 환경 가치에 의해. 사람들이 관찰했듯이, 윈도우에이 됩니다 에 의해 영향을받는 TMP환경 변수하지만, 다른 운영체제에 대한 알 수없는 변수가 있다면 그것은 분명했다. 적어도 우리가 OpenJDK에 대해 알고있는 것을 고려하면없는 것 같습니다.
delfuego 2009

5
좋은 대답이지만 Windows GetTempPath()에서는 TMP환경 변수의 영향을받지 않습니다 . msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
Dan Berindei

Solaris Sun JDK에서 값이 /var/tmp/(선행 슬래시 포함) 인 것을 보았습니다 . 버그 # 4391434 도 있습니다. 그리고 Mac OS와 Linux의 경우 이것은/tmp 엉망입니다!
dma_k

1
@Znik 함께 작업을 수행 oracle-java8-jdk=8u102(리눅스)
알렉스

118

자바 문서 에 따르면java.io.File

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

java.io.tmpdir시스템 속성 을 지정하려면 다음과 같이 JVM을 호출 할 수 있습니다.

java -Djava.io.tmpdir=/path/to/tmpdir

기본적으로이 값은 TMPWindows 시스템 의 환경 변수에서 가져와야합니다.


1
이것은 내 질문에 대한 대답이 아닙니다. 이것을 제어하는 ​​환경 변수가 있습니까?
Zach Hirsch

3
편집에도 불구하고 Bryan, java.io.tmpdir은 Mac 또는 Ubuntu에서 TMPDIR 환경 변수를 따르지 않습니다 (6.06에서 테스트 됨).
delfuego 2009

Oy, 그리고 또 다른 편집으로이 모든 댓글이 무의미한 것처럼 보입니다.
delfuego 2009

@Zach. 대답은 플랫폼에 따라 다릅니다.
Stephen C

12
그렇게 간단하지 않으며이 대답은 여전히 ​​올바르지 않습니다. Windows에서는 java.io.tmpdirWindows SDK 함수 GetTempPath( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx )를 사용하여 정의됩니다.이 함수 는 TMP 또는 TEMP 또는 USERPROFILE 또는 각 이전은 정의되지 않았습니다.
Pascal Thivent

62

_JAVA_OPTIONS환경 변수를 설정할 수 있습니다. 예를 들어 bash에서 이것은 트릭을 수행합니다.

export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

나는 그것을 내 bash 로그인 스크립트에 넣었고 트릭을 수행하는 것 같습니다.


3
이것은 Linux 및 MacOSX에서 작동하는 것처럼 보이지만 모든 Java 실행시 일부 추가 출력을 인쇄하는 불행한 부작용 Picked up _JAVA_OPTIONS:이 있습니다 . 이는 빌드 프로세스를 완전히 혼란스럽게합니다.
marc.guenther 2011 년

3
이 답변은 사용자 질문에 답변하고 사용자가 OS를 지정하지 않았거나 다른 측면의 영향을 피하고 싶기 때문에 투표했습니다. 나는 이것이 가장 좋은 대답으로 설정해야합니다 생각
R. 반 Twisk을

3
이 변수는 Sun JVM에만 해당되는 것으로 보입니다. IBM J9 JVM은이를 지원하지 않습니다. 대신 IBM_JAVA_OPTIONS를 지원합니다
sendmoreinfo

@sendmoreinfo, 내 지식으로는 Sun / Oracle 및 OpenJDK에서 작동합니다.
John St. John

1
환경 변수의 차이점에 대한 이 답변 에 따르면 JAVA_TOOL_OPTIONS더 이식성이 있습니다.
EndlosSchleife

38

사용하다

$ java -XshowSettings
Property settings:
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    java.io.tmpdir = /tmp

28

환경 변수는 아니지만 여전히 임시 디렉토리를 제어 할 수 있습니다.

-Djava.io.tmpdir

전의.:

java -Djava.io.tmpdir=/mytempdir

17

여기에서 무슨 일이 일어나고 있는지 명확히하려면 :

  • 임시 디렉토리 위치를 설정하는 권장 방법은 예를 들어 명령에 옵션 -Djava.io.tmpdir=/mytempdir을 제공하여 "java.io.tmpdir"이라는 시스템 속성을 설정하는 것 java입니다. System.setProperty("java.io.tmpdir", "/mytempdir)... 모듈로 샌드 박스 보안 문제를 호출하여 프로그램 내에서 속성을 변경할 수도 있습니다 .

  • 시작시 "java.io.tmpdir"속성을 명시 적으로 설정하지 않으면 JVM은이를 플랫폼 별 기본값으로 초기화합니다 . Windows의 경우 기본값은 Win32 API 메서드를 호출하여 얻습니다. Linux / Solaris의 경우 기본값은 분명히 유선입니다. 다른 JVM의 경우 다른 것이 될 수 있습니다.

경험적으로 "TMP"환경 변수는 Windows (현재 JVM 사용)에서 작동하지만 다른 플랫폼에서는 작동하지 않습니다. 이식성에 관심이 있다면 명시 적으로 시스템 속성을 설정해야합니다.


2

UNIX 터미널에서 아래 명령을 사용하십시오.

java -XshowSettings

모든 Java 속성 및 시스템 설정이 표시됩니다. 이 java.io.tmpdir가치를 찾으십시오 .

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