Pertanyaan Kapan System.getProperty ("java.io.tmpdir") mengembalikan "c: \ temp"


Hanya ingin tahu kapan System.getProperty("java.io.tmpdir") kembali "c:\temp". 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 "/ tmp" atau "/ var / tmp"; pada sistem Microsoft Windows biasanya "c: \ temp". Nilai yang berbeda dapat diberikan ke properti sistem ini ketika mesin virtual Java dipanggil, tetapi perubahan program untuk properti ini tidak dijamin memiliki efek apa pun pada direktori sementara yang digunakan oleh metode ini.

Tapi dalam kasusku ...

System.out.println(System.getProperty("java.io.tmpdir"));

Selalu kembali-

C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%

Dalam kondisi apa itu akan kembali "c:\temp"?

EDITED: Jika saya mengubah% TEMP% menjadi C: \ Temp maka saya akan mendapatkan C: \ Temp, kan? Tapi dokumentasi menunjukkan c: \ Temp bukannya C: \ Temp.


76
2018-05-03 05:40


asal


Jawaban:


Di MS Windows direktori sementara diatur oleh variabel lingkungan TEMP. Di XP, direktori sementara ditetapkan per pengguna sebagai Pengaturan Lokal \ Temp.

Jika Anda mengubah variabel lingkungan TEMP Anda C:\temp, maka Anda mendapatkan hal yang sama ketika Anda menjalankan:

System.out.println(System.getProperty("java.io.tmpdir"));


87
2018-05-03 05:50



Jika Anda mengatur

-Djava.io.tmpdir=C:\temp

27
2018-05-03 05:47



Di satu sisi, ketika Anda menelepon System.getProperty("java.io.tmpdir") instruksi, Java memanggil fungsi API Win32 GetTempPath. Menurut MSDN :

Fungsi GetTempPath memeriksa keberadaan lingkungan   variabel dalam urutan berikut dan menggunakan jalur pertama yang ditemukan:

  1. Jalur yang ditentukan oleh variabel lingkungan TMP.
  2. Jalur yang ditentukan oleh variabel lingkungan TEMP.
  3. Jalur yang ditentukan oleh variabel lingkungan USERPROFILE.
  4. Direktori Windows.

Di sisi lain, silakan periksa alasan historis mengapa TMP dan TEMP hidup bersama. Ini benar-benar layak dibaca.


23
2018-04-18 11:40



Nilai dari %TEMP% variabel lingkungan sering spesifik-pengguna dan Windows mengaturnya terkait dengan akun pengguna yang sedang login. Beberapa akun pengguna mungkin tidak memiliki profil pengguna, misalnya ketika proses Anda berjalan sebagai layanan SYSTEM, LOCALSYSTEM atau akun built-in lain, atau dipanggil oleh aplikasi IIS dengan identitas AppPool dengan Buat profil pengguna opsi dinonaktifkan. Begitu pun ketika Anda tidak menimpa %TEMP% variabel secara eksplisit, Windows dapat digunakan c:\temp atau bahkan c:\windows\temp folder untuk, katakanlah, akun pengguna non-biasa. Dan yang lebih penting, proses mungkin tidak memiliki hak akses ke direktori ini!


0
2017-10-27 11:36