2012-01-11 6 views
6

मेरे पास एक जावा डेस्कटॉप एप्लिकेशन है जो मैंने लिखा है। निष्पादन के दौरान मैं सिस्टम में परिभाषित डिफ़ॉल्ट पथ नाम पर फ़ोल्डर और फ़ाइलों को बना देता हूं।उपयोगकर्ता काम कर रहे निर्देशिका: XP बनाम Vista

Java.io.files स्पष्ट रूप से कहा गया है: By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

इसके अलावा, मैं IzPack उपयोग कर रहा हूँ स्थापना और शॉर्टकट निर्माण कर सकें।

जब मैं अपने एक्सपी कंप्यूटर पर अपना एप्लिकेशन चला रहा हूं, इंस्टॉलेशन के बाद मुझे डेस्कटॉप शॉर्टकट मिलता है, और उल्लिखित फाइलें और फ़ोल्डर्स सृजन उस स्थान पर हैं जहां इज़पैक ने जार स्थापित किया था। जो अपेक्षित व्यवहार है।

लेकिन जब मैं Vista मशीन पर इसका परीक्षण करता हूं, फ़ोल्डर और फ़ोल्डर्स डेस्कटॉप पर बनाए जाते हैं! हालांकि जार सही स्थान पर है (सी: \ प्रोग्राम फाइल .. आदि)।

मैं उन फ़ाइलों को जार में उसी फ़ोल्डर में बनाना चाहता हूं, और निश्चित रूप से डेस्कटॉप पर नहीं।

क्या कोई मुझे यहां क्या हो रहा है इस पर कोई अंतर्दृष्टि दे सकता है?

+2

लेखन सी: \ Vista फ़ाइलों को Vista में यूएसी सहमति की आवश्यकता है, इसलिए मुझे संदेह है कि सिस्टम डेस्कटॉप का उपयोग फ़ॉलबैक के रूप में करता है। –

+0

क्या आपको लगता है कि मैं फॉलबैक को नियंत्रित कर सकता हूं? – uzil24

+0

आप अभी भी कोर ऐप पुस्तकालयों और ऐसे के लिए% PROGRAMFILES% के अंदर डिफ़ॉल्ट जावा ऐप स्थापना सेट कर सकते हैं। लेकिन, आपके ** उपयोगकर्ता/डेटा कॉन्फ़िगरेशन को सहेजने के बजाय ** किसी भी विंडोज ओएस के तहत% PROGRAMFILES% के अंदर, 'System.getProperty ("user.home")' या 'System.getenv ("USERPROFILE") 'अपने जावा ऐप के अंदर एक विशेष फ़ोल्डर के साथ जो उपयोगकर्ता/ऐप को कुछ बदलने के लिए आसान बनाता है? –

उत्तर

1

ऐसा इसलिए है क्योंकि Vista/Seven में प्रोग्राम प्रोग्राम फ़ोल्डर में लिखने के लिए प्रशासनिक हस्तक्षेप की आवश्यकता होती है, इसलिए JVM अगले लिखने योग्य स्थान को फ़ॉलबैक के रूप में देखता है: डेस्कटॉप (या उपयोगकर्ता दस्तावेज़ निर्देशिका)। आप सभी ओएस पर एक एकीकृत तरीके से उपयोगकर्ता होम निर्देशिका को आसानी से निर्धारित कर सकते हैं, हालांकि, JVM को केवल एक - उम्मीदवार - उचित स्थान चुनने से बेहतर तरीका है।

इस के बाद से JVM विंडोज पर के लिए एक known bug है, कि अगर मदद नहीं करता है, वापस आने सिस्टम वातावरण चर की जाँच करने के लिए है USERPROFILE जो सही उपयोगकर्ता घर फ़ोल्डर में इंगित करना चाहिए:

String userHome = System.getenv("USERPROFILE"); 
+0

पर है। मैंने इसे ध्यान में नहीं लिया। उपयोगकर्ता होम निर्देशिका का उपयोग करने की एक संभावित समस्या अनइंस्टॉल समस्या है। मुझे यकीन नहीं है कि मैं उस मामले में उन फ़ाइलों को कैसे हटा सकता हूं। मुझे पता है कि कुछ अनुप्रयोग उनके पीछे फ़ोल्डरों को छोड़ देते हैं। मुझे यह पसंद नहीं आया। – uzil24

+1

आप आसानी से यह देखने के लिए जांच सकते हैं कि चयनित फ़ोल्डर अस्थायी फ़ाइल बनाने का प्रयास करके लिख रहा है या नहीं और यह जांच कर रहा है कि उसके मूल फ़ोल्डर की क्या अपेक्षा है, और विफलता के मामले में कोई अन्य स्थान चुनें। –

+0

ठीक है, मैंने अपने आवेदन को संशोधित किया ताकि वह सापेक्ष पथ के बजाय "user.dir" का उपयोग कर सके और परिणाम एक आपदा है। डेस्कटॉप शॉर्टकट के साथ फ़ोल्डर डेस्कटॉप पर बनाए जाते हैं। "सभी प्रोग्राम" मेनू शॉर्टकट के साथ फ़ोल्डर्स c: \ doc और सेटिंग \ उपयोगकर्ता स्थान पर बनाए जाते हैं। और सीधे सी: \ प्रोग्राम फ़ाइलों \ app_name स्थान से जार चलाते समय, यह चलता है जैसा कि यह करना चाहिए। "user.home" का उपयोग करके हर बार एक ही परिणाम होता है। मैं जार के स्थान पर एप्लिकेशन को कैसे चला सकता हूं? – uzil24

संबंधित मुद्दे