जब System.getProperty ("java.io.tmpdir") "c: \ temp" लौटाता है


110

System.getProperty("java.io.tmpdir")लौटते समय भी जिज्ञासु "c:\temp"Java.io.File जावा डॉक्स के अनुसार -

डिफ़ॉल्ट अस्थायी-फ़ाइल निर्देशिका को सिस्टम प्रॉपर्टी java.io.tmpdir द्वारा निर्दिष्ट किया जाता है। UNIX प्रणालियों पर इस संपत्ति का डिफ़ॉल्ट मूल्य आमतौर पर "/ tmp" या "/ var / tmp" होता है; Microsoft Windows सिस्टम पर यह आमतौर पर "c: \ temp" है। जावा वर्चुअल मशीन के आने पर इस सिस्टम प्रॉपर्टी को एक अलग मान दिया जा सकता है, लेकिन इस प्रॉपर्टी के प्रोग्रामेटिक बदलावों को इस पद्धति द्वारा उपयोग किए जाने वाले अस्थायी डायरेक्टरी पर कोई प्रभाव नहीं पड़ने की गारंटी नहीं है।

लेकिन मेरे मामले में-

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

हमेशा रिटर्न-

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

यह किन परिस्थितियों में वापस आएगा "c:\temp"?

EDITED: अगर मैं% TEMP% को C: \ Temp में बदलता हूं तो मुझे C: \ Temp मिलेगा, है ना? लेकिन प्रलेखन C: \ Temp के बजाय c: \ Temp दिखाता है।


4
en.wikipedia.org/wiki/Temporary_folder विकी को देखते हुए, मैं कहूंगा कि आप इसे C:\Temp% TEMP% बदलकर, विंडोज 98 स्थापित कर सकते हैं या इसे पास कर सकते हैं java -Djava.io.tmpdir=C:\Temp। इसे भी देखें: stackoverflow.com/questions/3437095/…
bezmax

@ मैक्स धन्यवाद मैक्स। अगर मैं% TEMP% बदलूं C:\Tempतो मुझे मिलेगा C:\Temp। सही? लेकिन c:\Tempइसके बजाय डॉक्टर शो C:\Temp। :)
आशीष पंचोली

2
मुझे नहीं पता कि आपके आवेदन के साथ ड्राइव अक्षर क्यों मायने रखता है?
आजुक

@AishishPancholi आपको वहाँ नहीं मिला?
अजदेक

1.4.2 Javadoc जिसे आप लिंक कर रहे हैं वह पुराना है। वर्तमान 7 Javadoc में "ठेठ" निर्देशिका का उल्लेख है "C:\\WINNT\\TEMP"
अब्दुल

जवाबों:


128

एमएस विंडोज में अस्थायी निर्देशिका पर्यावरण चर द्वारा निर्धारित की जाती है TEMP। XP में, अस्थायी निर्देशिका को प्रति उपयोगकर्ता स्थानीय सेटिंग \ Temp के रूप में सेट किया गया था।

यदि आप अपने TEMP पर्यावरण चर को बदलते हैं C:\temp, तो जब आप दौड़ते हैं, तो आपको वही मिलता है:

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


2
विंडोज पर% TMP% नामक एक दूसरा पर्यावरण चर है और यह वह है जो कभी-कभी उपयोग किया जाता है,% TEMP% नहीं, उदाहरण के लिए ग्रहण के लिए GWT प्लगइन% TMP% चर का उपयोग करता है।
वी शेटलैंड

@ जोशी: आपका जवाब काफी सटीक है। हालाँकि, मैं आपके द्वारा दिए गए उदाहरण से असहमत हूँ: यदि उपयोगकर्ता ने TMPenv var सेट किया है , तो TEMPवसीयत को अनदेखा कर दिया जाएगा। कृपया, मेरे उत्तर को देखें और मुझे बताएं कि क्या आप समझ नहीं पाए हैं कि मेरा क्या मतलब है।
ज़कारिया


33

एक तरफ, जब आप System.getProperty("java.io.tmpdir")निर्देश कहते हैं , तो जावा Win32 एपीआई के फ़ंक्शन को कॉल करता है GetTempPathMSDN के अनुसार :

GetTempPath फ़ंक्शन निम्न क्रम में पर्यावरण चर के अस्तित्व के लिए जाँच करता है और पाया गया पहला पथ का उपयोग करता है:

  1. TMP पर्यावरण चर द्वारा निर्दिष्ट पथ।
  2. TEMP पर्यावरण चर द्वारा निर्दिष्ट पथ।
  3. USERPROFILE पर्यावरण चर द्वारा निर्दिष्ट पथ।
  4. विंडोज निर्देशिका।

दूसरी तरफ, कृपया क्यों TMPऔर TEMPसह - अस्तित्व के ऐतिहासिक कारणों की जाँच करें । यह वास्तव में पढ़ने लायक है।


0

%TEMP%पर्यावरण चर का मान अक्सर उपयोगकर्ता-विशिष्ट होता है और Windows इसे वर्तमान में उपयोगकर्ता खाते में लॉग इन करने के संबंध में सेट करता है। कुछ उपयोगकर्ता खातों में कोई उपयोगकर्ता प्रोफ़ाइल नहीं हो सकती है, उदाहरण के लिए, जब आपकी प्रक्रिया एक सेवा के रूप में चलती है SYSTEM, LOCALSYSTEMया अन्य बिल्ट-इन खाते होती है, या आईआईएस एप्लिकेशन द्वारा AppPool पहचान के साथ बनाया जाता है जिसके साथ उपयोगकर्ता प्रोफ़ाइल विकल्प अक्षम होता है। तो जब आप %TEMP%स्पष्ट रूप से चर को अधिलेखित नहीं करते हैं, तो भी विंडोज , गैर-सामान्य उपयोगकर्ता खातों के लिए c:\tempया यहां तक ​​कि c:\windows\tempफ़ोल्डरों का उपयोग कर सकता है । और क्या अधिक महत्वपूर्ण है, इस निर्देशिका में प्रक्रिया का कोई अधिकार नहीं हो सकता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.