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?
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?
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 ke GetTempPath()
; Beginilah cara pada Windows, Java mencerminkan nilai TMP
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.
-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 oleh TMP
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 oleh TMP
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 Docs
Direktori file sementara default ditentukan oleh properti sistem java.io.tmpdir. Pada sistem UNIX, nilai default dari properti ini biasanya adalah "/ tmp" atau "/ var / tmp"; pada sistem Microsoft Windows biasanya "c: \ temp". Nilai yang berbeda dapat diberikan ke properti sistem ini saat mesin virtual Java dipanggil, tetapi perubahan programatik pada properti ini tidak dijamin akan berdampak pada direktori sementara yang digunakan oleh metode ini.
Untuk menentukan java.io.tmpdir
properti Sistem, Anda dapat menjalankan JVM sebagai berikut:
java -Djava.io.tmpdir=/path/to/tmpdir
Secara default, nilai ini harus berasal dari TMP
variabel lingkungan pada sistem Windows
java.io.tmpdir
ditentukan dengan menggunakan fungsi SDK Windows GetTempPath
( 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:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Saya memasukkannya ke dalam skrip login bash saya dan sepertinya berhasil.
Picked up _JAVA_OPTIONS:
Ini benar-benar membingungkan proses pembuatan kami.
JAVA_TOOL_OPTIONS
lebih portabel.
Menggunakan
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
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
ke java
perintah. Properti ini juga dapat diubah dari dalam program dengan memanggil System.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.