Monday 15 August 2011

java - How to ensure case-sensitive resource is what I look for on a case-insensitive file system? -


मेरे पास एक प्रोग्राम है जिसके लिए ClassLoader # getResource (स्ट्रिंग) का उपयोग कर संसाधनों को देखने की जरूरत है। कार्यक्रम सामान्य रूप से ठीक काम करता है लेकिन किसी विंडोज मशीन पर मैं एक समस्या में चल रहा हूँ। मैंने इसे फ़ाइल सिस्टम की संपत्ति के लिए नीचे तोड़ दिया है, केस-असंवेदनशील है। सामान्य रूप से, सही फ़ाइल देखने के लिए कई पथ की कोशिश की जाती है एक केस-असंवेदनशील प्रणाली पर, हालांकि, यह संभव है कि गलत फ़ाइल का मिलान किया गया मेरे कार्यक्रम में, संसाधन नाम केस-संवेदी हैं, इसलिए मामला-असंवेदनशील सिस्टम पर लौटा फाइल गलत हो सकती है अगर उसके पास अलग-अलग कैपिटलाइज़ेशन है। उदाहरण के लिए: मैं देख रहा / रही हूं बार / फ़ू क्लास के लिए और एक फ़ाइल बार / फूड क्लास वापस लौटाएं। इस मामले को पहचानने और इसे अस्वीकार करने की आवश्यकता है

यह जांचने का सबसे अच्छा तरीका क्या है कि क्या लौटा यूआरएल मेरे विशिष्ट पथ में एक मामले-संवेदनशील तरीके?

मैं URL के getPath के परिणाम के साथ निर्दिष्ट पथ की तुलना करने के बारे में सोच रहा था लेकिन कुछ भी नहीं मुझे बताता है कि यदि परिणामस्वरूप यूआरएल मेरे दिए गए पथ या असली पथ का इस्तेमाल करेगा इस प्रकार, जब तक कोई मुझे प्रलेखन नहीं दिखाता है कि यह अलग है और निर्दिष्ट है, तो मुझे यकीन नहीं हो सकता कि यह हमेशा मामला होगा।

समस्या यह है कि आप किसी विशिष्ट संसाधन को खोजने के लिए पूर्ण पथ का उपयोग नहीं कर रहे हैं। इसके लिए, आपके प्रश्न का उत्तर केवल आप नहीं कर सकते एक केस असंवेदनशील प्रणाली के लिए, "बार / फ़ू। क्लास" किसी भी एक संदर्भ से पथ पर केवल एक फाइल हो सकती है। एकमात्र तरीका ऐसे रास्ते पर कई फाइलें हो सकती हैं, यदि उनके पास अलग-अलग पथ हैं (जैसे /a/bar/foo.class और /b/bar/foo.class), इस मामले में उनके पास एक अलग है संदर्भ (= दो अलग-अलग फ़ोल्डर्स "बार" है जिसमें दोनों में "foo.class" नाम की फ़ाइल है)।

जब गैर-पूर्ण पथ (जैसे बार / फ़ू । वर्ग), वहाँ बिल्कुल कोई गारंटी नहीं है कि सिस्टम पर एक फाइल होगी जो उस रास्ते से मेल खाती है (फ़ाइल का पूर्ण पथ अर्थ से मेल करता है जिसमें आप निर्दिष्ट पथ शामिल हैं)। इसके अलावा, यदि कई मैचों हैं, तो इसमें कोई गारंटी नहीं है कि वे कैपिटल अक्षरों में अलग-अलग होंगे, इसलिए मामले की संवेदनशीलता का उपयोग करने के लिए मामले की संवेदनशीलता का उपयोग करना एक अच्छा तरीका नहीं है। इसके अलावा, एक केस असंवेदनशील प्रणाली के लिए दोनों फाइलों का एक ही नाम है, लेकिन वे एक अलग पूर्ण स्थान पर हैं (लेकिन एक अलग संदर्भ [समान: [फ़ोल्डर:] के समान रिश्तेदार स्थान)।

यदि संभव हो तो, के लिए खोजें फ़ाइलों का उपयोग उनके पूर्ण पथ इस तरह, समान पूंजीकरण के साथ ही फाइल केस संवेदी सिस्टम पर मेल की जाएगी और उस पूर्ण पथ पर एक फ़ाइल (यदि कोई है) केस असंवेदनशील सिस्टम पर मेल की जाएगी। मुझे उम्मीद है कि यह उत्तर आपके लिए अधिक उपयोगी है।


No comments:

Post a Comment