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

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

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



답변

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

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

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

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


답변

자바 문서 에 따르면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 시스템 의 환경 변수에서 가져와야합니다.


답변

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

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

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


답변

사용하다

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


답변

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

-Djava.io.tmpdir

전의.:

java -Djava.io.tmpdir=/mytempdir


답변

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

  • 임시 디렉토리 위치를 설정하는 권장 방법은 예를 들어 명령에 옵션 -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 사용)에서 작동하지만 다른 플랫폼에서는 작동하지 않습니다. 이식성에 관심이 있다면 명시 적으로 시스템 속성을 설정해야합니다.


답변

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

java -XshowSettings

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