TMP
Gcc'nin geçici dosyalarını yazdığı gibi şeyleri kontrol etmek için ortam değişkenini kullandım , ancak java'nın createTempFile API'si için bir eşdeğer bulamıyorum .
Böyle bir ortam değişkeni var mı?
TMP
Gcc'nin geçici dosyalarını yazdığı gibi şeyleri kontrol etmek için ortam değişkenini kullandım , ancak java'nın createTempFile API'si için bir eşdeğer bulamıyorum .
Böyle bir ortam değişkeni var mı?
Yanıtlar:
Hmmm - bu JVM tarafından ele alındığından, OpenJDK VM kaynak kodunu biraz araştırdım, OpenJDK tarafından yapılanların Java 6 ve öncesi tarafından yapılanları taklit edebileceğini düşündüm. Bunu yapmanın Windows dışında bir yolu olduğu konusunda güven verici değil.
On Windows'un , OpenJDK en get_temp_directory()
işlevi, bir Win32 API çağrısını yapar GetTempPath()
; Java, Windows'ta TMP
ortam değişkeninin değerini böyle yansıtır .
On Linux ve Solaris , aynı get_temp_directory()
fonksiyonlar statik değeri döndürür /tmp/
.
Gerçek JDK6'nın bu kurallara tam olarak uyup uymadığını bilmiyorum, ancak listelenen platformların her birindeki davranışa göre, öyle görünüyor.
-Djava.io.tmpdir
komut satırı seçeneği aracılığıyla) nasıl ayarlanacağını ve bu varsayılan değerin etkilenip etkilenmediğini arıyordu . hepsi bir çevre değeriyle. İnsanlar gözlenen ettiği gibi, Windows o olduğunu etkilenen TMP
ortam değişkeni, ancak diğer işletim sistemleri için bazı bilinmeyen değişken olsaydı şimdiye belli değildi. En azından OpenJDK hakkında bildiklerimiz göz önüne alındığında, yok gibi görünüyor.
GetTempPath()
yalnızca TMP
ortam değişkeninden etkilenmez : msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
/var/tmp/
eğik çizgiyle) olduğunu gördüm , bunun için # 4391434 hatası bile var. Ve Mac OS ve Linux için bu/tmp
- ne karmaşa!
oracle-java8-jdk=8u102
(linux) ile çalışıyor
Göre java.io.File
Java Dokümanlar
Varsayılan geçici dosya dizini, java.io.tmpdir sistem özelliği tarafından belirtilir. UNIX sistemlerinde bu özelliğin varsayılan değeri genellikle "/ tmp" veya "/ var / tmp" dir; Microsoft Windows sistemlerinde tipik olarak "c: \ temp" dir. Java sanal makinesi çağrıldığında bu sistem özelliğine farklı bir değer verilebilir, ancak bu özelliğe yapılan programlı değişikliklerin, bu yöntem tarafından kullanılan geçici dizin üzerinde herhangi bir etkisi olacağı garanti edilmez.
java.io.tmpdir
System özelliğini belirtmek için JVM'yi şu şekilde çağırabilirsiniz:
java -Djava.io.tmpdir=/path/to/tmpdir
Varsayılan olarak bu değer TMP
Windows sistemlerindeki ortam değişkeninden gelmelidir
java.io.tmpdir
Windows SDK işlevi GetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ) kullanılarak tanımlanır; bu, TMP veya TEMP veya USERPROFILE veya Windows önceki tanımlı değil.
_JAVA_OPTIONS
Çevresel değişkeninizi ayarlayabilirsiniz . Örneğin, bash'da bu hile yapacaktı:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Bunu bash giriş betiğime koydum ve hile yapıyor gibi görünüyor.
Picked up _JAVA_OPTIONS:
Bu, oluşturma sürecimizi tamamen karıştırır.
JAVA_TOOL_OPTIONS
, daha taşınabilirdir.
Kullanım
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Burada neler olup bittiğini netleştirmek için:
Geçici dizin konumunu ayarlamak için tavsiye edilen bir yol seçeneği vererek "java.io.tmpdir" olarak adlandırılan sistem özelliği, örneğin ayarlamaktır -Djava.io.tmpdir=/mytempdir
için java
komuta. Özellik, bir program içinden System.setProperty("java.io.tmpdir", "/mytempdir)
modulo sandbox güvenlik sorunlarını ... çağırarak da değiştirilebilir .
Başlangıçta "java.io.tmpdir" özelliğini açıkça ayarlamazsanız, JVM bunu platforma özgü varsayılan bir değere başlatır . Windows için varsayılan, bir Win32 API yöntemine yapılan çağrı ile elde edilir. Linux / Solaris için varsayılan, görünüşe göre fiziksel bağlantılı. Diğer JVM'ler için başka bir şey olabilir.
Deneysel olarak, "TMP" ortam değişkeni Windows'ta (mevcut JVM'lerle) çalışır, ancak diğer platformlarda çalışmaz. Taşınabilirliği önemsiyorsanız, sistem özelliğini açıkça ayarlamalısınız.