2010-11-06 4 views
13

किसी भी कारण से, मुझे कभी-कभी कुछ फ़ाइलों को पढ़ने के लिए जावा प्रोग्राम में विंडोज पर मौजूदा उपयोगकर्ता के माय दस्तावेज़ फ़ोल्डर को खोजने की आवश्यकता होती है। लेकिन जहां तक ​​मैं कह सकता हूं, ऐसा करने का कोई तरीका नहीं है जो गंभीर रूप से त्रुटिपूर्ण नहीं है।जावा के साथ विंडोज़ पर उपयोगकर्ता के मेरे दस्तावेज़ फ़ोल्डर को खोजने के लिए उचित तरीका?

पहला गलत तरीका: System.getProperty ("user.home");
यह काम नहीं करेगा क्यों:

  • यह केवल \ उपयोगकर्ता नाम \ फ़ोल्डर रिटर्न; मुझे दस्तावेज़ फ़ोल्डर प्राप्त करने के लिए अंत में "\ दस्तावेज़ \" जोड़ना होगा ... और यह केवल अंग्रेज़ी में काम करता है।
  • Sun bugs 6519127 और 4787931. जावा को डेस्कटॉप पर खोजने के लिए डेस्कटॉप को एक बहिष्कृत रजिस्ट्री कुंजी * पढ़कर विंडोज़ पर उपयोगकर्ता होम फ़ोल्डर मिल जाता है; इस विधि में कई ज्ञात समस्याएं हैं जो आसानी से पूरी तरह से गलत फ़ोल्डर को वापस करने का कारण बनती हैं। बग 3.75 साल और 8 साल पुरानी हैं, बिना किसी फिक्स के।

दूसरा गलत तरीका: उपयोगकर्ता के व्यक्तिगत फ़ोल्डर को पाने के लिए रजिस्ट्री-रीडिंग प्रोग्राम का उपयोग करना, जो मेरा दस्तावेज़ है (लेकिन i18n'd)।
यह क्यों काम नहीं करेगा:
हालांकि यह केवल अंग्रेज़ी की समस्या को हल करता है, यह अभी भी एक ही बहिष्कृत रजिस्ट्री क्षेत्र का उपयोग कर रहा है, इसलिए बग अभी भी लागू होते हैं।

बहिष्कृत रजिस्ट्री कुंजी एक देशी कॉल (SHGetKnownFolderPath) का उपयोग करने के लिए कहती है जो मैं स्पष्ट रूप से जावा से नहीं कर सकता।

तीसरे गलत तरीके:

JFileChooser fr = new JFileChooser(); 
FileSystemView fw = fr.getFileSystemView(); 
File documents = fw.getDefaultDirectory(); 

क्यों यह काम नहीं करेगा: यह बहुत अच्छा काम करता है!
जब यह नहीं होता है। जबकि मेरे पास एक प्रोग्राम था जो पृष्ठभूमि में खुला और चल रहा था, मैंने डायरेक्टएक्स गेम खोला (फॉलआउट: न्यू वेगास)। जावा प्रोग्राम तुरंत को बिना स्टैक ट्रेस के समाप्त कर दिया गया। हमेशा पुनरुत्पादित करें (मेरे लिए उस खेल पर, और कौन जानता है और क्या)। सूर्य बग नहीं मिला #।

तो जावा से, विंडोज़ पर, उपयोगकर्ता के दस्तावेज़ फ़ोल्डर को खोजने के लिए कोई तरीका है, जिसमें ज्ञात समस्याएं नहीं हैं?

(यह एक अच्छा बड़ा सवाल है।)

* (कुंजी है "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ एक्सप्लोरर \ शैल फ़ोल्डर")

+0

एक ही रूप में [लगाने के लिए कैसे "मेरे दस्तावेज़" फ़ोल्डर ] (http://stackoverflow.com/questions/1503555/how-to-find-my- दस्तावेजों-फ़ोल्डर)। यह WinGoldersjava, SHGetSpecialFolderPath के आसपास एक जेएनआई रैपर का उल्लेख करता है। चूंकि आप विंडोज-विशिष्ट कार्यक्षमता का उपयोग कर रहे हैं, इसलिए जेएनआई ठीक होना चाहिए। –

+1

क्या आपने वास्तव में इन क्रैश को कोड स्निपेट में तीसरे तरीके से अलग किया था? चूंकि इस विधि का इस्तेमाल स्विंग्स ओपन फाइल डायलॉग (जेफाइलचुओसर) द्वारा किया जाता है, इसलिए ऐसा लगता है कि बहुत सारे जावा ऐप्स इससे पीड़ित होंगे? –

+0

http://stackoverflow.com/questions/1503555/how-to-find-my- दस्तावेज़- फ़ोल्डर –

उत्तर

0

एक कस्टम जावा एपीआई नहीं है कि किसी को बनाया (अपनी वेबसाइट नहीं रह गया काम करता है), लेकिन वहाँ कोड Google Code पर बनी हुई है:

http://winfoldersjava.googlecode.com/files/WinFoldersJava_1.1.zip

दो हैं DLL की, संदर्भित किया जा करने के लिए प्रत्येक वास्तुकला (x86 और 64) के लिए एक आवश्यकता है।

-1

user.home "मेरे दस्तावेज़" नहीं हैं, लेकिन उपयोगकर्ता घर फ़ोल्डर, जैसे यूनिक्स ~ /। "मेरे दस्तावेज़" प्राप्त करने के लिए आप System.getProperty ("user.home") + "\ दस्तावेज़" का उपयोग कर सकते हैं; भाषा प्रणाली के बावजूद। कोशिश करो।

+0

उन्होंने पहले से ही कहा है कि उन्हें बहुभाषी समर्थन की आवश्यकता है - यह काम नहीं करेगा। –

+0

यह अंग्रेजी-केवल समस्या के बिना भी काम नहीं करेगा; जैसा कि मैंने अपने प्रश्न में बताया है, जावा उपयोगकर्ता को खोजने के लिए एक बहिष्कृत रजिस्ट्री कुंजी का उपयोग करता है। यह XP-> Vista अपग्रेड पर रोमिंग प्रोफाइल पर असफल हो सकता है, यदि उपयोगकर्ता ने अपना डेस्कटॉप फ़ोल्डर इत्यादि का नाम बदल दिया हो। (आंशिक फ़िक्स डिलीवर हो सकते हैं लेकिन यह कुल टूटा हुआ है) –

+0

कृपया उत्तर पोस्ट न करें जो अधिक समस्याएं पैदा करते हैं वे हल करने की तुलना में। –

4

ऐसा करने के लिए कोई शुद्ध जावा तरीका नहीं है, लेकिन आप जेएनआई पर जेएनए रैपर का उपयोग किसी भी देशी कोड को लिखने के बिना कर सकते हैं।उपभोक्ता

What is the best way to find the users home directory in Java?

3

एक समय है, लेकिन एक खिड़कियों उपयोगकर्ता की 'दस्तावेज़' फ़ोल्डर पाने की विश्वसनीय तरीका:: वहाँ कैसे आधे रास्ते पर प्रतिक्रियाओं नीचे विंडोज पर दस्तावेज़ फ़ोल्डर पाने के लिए का एक अच्छा उदाहरण है अपने जावा बनाओ ऐप एक बैट स्क्रिप्ट निष्पादित करता है जो reg.exe (एक विंडोज सिस्टम फ़ाइल) का उपयोग करता है ताकि reg कुंजी के मान को ढूंढ सकें जिसमें पथ है। फिर उसी बैट फ़ाइल में उस पाइपलाइन का उपयोग उस डेटा को 'findstr' फ़ंक्शन पर भेजने के लिए करें जो विंडोज कमांड प्रॉम्प्ट में है। लौटाए गए मान को टेक्स्ट फ़ाइल में आउटपुट करने के लिए एक और पाइपलाइन का उपयोग करें। फिर, बस अपने जावा ऐप को उस टेक्स्ट फ़ाइल को पढ़ें, और इसे पूरा करने के बाद इसे हटाएं :) मेरे लिए काफी अच्छा काम किया।

बल्ला फ़ाइल के लिए कोड:

@ echo off 

Title Find Documents Folder 

Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" |findstr "Personal">>DocPath.dat 

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

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