Saya telah menggunakan TMP
variabel lingkungan untuk mengontrol hal-hal seperti di mana gcc menulis file sementara itu, tetapi saya tidak dapat menemukan padanan untuk API createTempFile java .
Apakah ada variabel lingkungan seperti itu?
java
configuration
environment-variables
temp
Zach Hirsch
sumber
sumber
Jawaban:
Hmmm - karena ini ditangani oleh JVM, saya mempelajari kode sumber VM OpenJDK sedikit, berpikir bahwa mungkin apa yang dilakukan oleh OpenJDK meniru apa yang dilakukan oleh Java 6 dan sebelumnya. Tidak dapat dipastikan bahwa ada cara untuk melakukan ini selain di Windows.
Pada Windows ,
get_temp_directory()
fungsi OpenJDK membuat panggilan API Win32 keGetTempPath()
; Beginilah cara pada Windows, Java mencerminkan nilaiTMP
variabel lingkungan.Di Linux dan Solaris ,
get_temp_directory()
fungsi yang sama mengembalikan nilai statis/tmp/
.Saya tidak tahu apakah JDK6 yang sebenarnya mengikuti konvensi yang tepat ini, tetapi berdasarkan perilaku di masing-masing platform yang terdaftar, sepertinya memang demikian.
sumber
-Djava.io.tmpdir
opsi baris perintah ke JVM), dan jika nilai default itu terpengaruh di semua dengan nilai lingkungan. Sebagai orang telah diamati, pada Windows itu adalah dipengaruhi olehTMP
variabel lingkungan, tetapi tidak jelas apakah ada beberapa variabel yang tidak diketahui untuk OS lainnya. Sepertinya tidak ada, setidaknya mengingat apa yang kami ketahui tentang OpenJDK.GetTempPath()
tidak hanya dipengaruhi olehTMP
variabel lingkungan: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx/var/tmp/
(dengan garis miring), bahkan ada bug # 4391434 untuk itu. Dan untuk Mac OS dan Linux itu/tmp
- sungguh berantakan!oracle-java8-jdk=8u102
(linux)Menurut
java.io.File
Java DocsUntuk menentukan
java.io.tmpdir
properti Sistem, Anda dapat menjalankan JVM sebagai berikut:Secara default, nilai ini harus berasal dari
TMP
variabel lingkungan pada sistem Windowssumber
java.io.tmpdir
ditentukan dengan menggunakan fungsi SDK WindowsGetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ) yang akan menyelesaikan ke TMP atau TEMP atau USERPROFILE atau direktori Windows jika masing-masing sebelumnya tidak ditentukan.Anda dapat mengatur
_JAVA_OPTIONS
variabel lingkungan Anda . Misalnya di bash ini akan melakukan triknya:Saya memasukkannya ke dalam skrip login bash saya dan sepertinya berhasil.
sumber
Picked up _JAVA_OPTIONS:
Ini benar-benar membingungkan proses pembuatan kami.JAVA_TOOL_OPTIONS
lebih portabel.Menggunakan
sumber
Ini bukan variabel lingkungan, tetapi tetap memberi Anda kendali atas dir temp:
ex.:
sumber
Untuk memperjelas tentang apa yang terjadi di sini:
Cara yang disarankan untuk menyetel lokasi direktori sementara adalah dengan menyetel properti Sistem bernama "java.io.tmpdir", misalnya dengan memberikan opsi
-Djava.io.tmpdir=/mytempdir
kejava
perintah. Properti ini juga dapat diubah dari dalam program dengan memanggilSystem.setProperty("java.io.tmpdir", "/mytempdir)
... masalah keamanan sandbox modulo.Jika Anda tidak secara eksplisit menyetel properti "java.io.tmpdir" saat memulai, JVM akan menginisialisasi ke nilai default khusus platform . Untuk Windows, default diperoleh dengan panggilan ke metode API Win32. Untuk Linux / Solaris defaultnya tampaknya terprogram. Untuk JVM lain, ini bisa menjadi sesuatu yang lain.
Secara empiris, variabel lingkungan "TMP" berfungsi di Windows (dengan JVM saat ini), tetapi tidak di platform lain. Jika Anda peduli dengan portabilitas, Anda harus menyetel properti sistem secara eksplisit.
sumber
Gunakan perintah di bawah ini pada terminal UNIX:
Ini akan menampilkan semua properti java dan pengaturan sistem. Dalam mencari
java.io.tmpdir
nilai ini.sumber