2010-03-23 4 views
5

फ़ाइल और निर्देशिका नामों के लिए कुछ प्रतिबंधित वर्ण (और यहां तक ​​कि पूर्ण फ़ाइल नाम, विंडोज़) हैं। यह other question पहले से ही उन्हें कवर करता है।जावा में फ़ाइल नामों के लिए वर्जित वर्णों को कैसे पुनर्प्राप्त करें?

क्या जावा में, वर्जित वर्णों की इस सूची को पुनर्प्राप्त करने का कोई तरीका है, जो सिस्टम (लाइन ब्रेकर वर्णों को पुनः प्राप्त करने की तरह थोड़ा) पर निर्भर करेगा? या क्या मैं केवल सिस्टम को जांच कर, सूची की जांच कर सकता हूं?


संपादित करें: मेरी विशेष स्थिति के बारे में अधिक पृष्ठभूमि, एक तरफ सामान्य प्रश्न से।

मैं कुछ डेटा (उनके सामग्री पर कोई वास्तविक नियंत्रण नहीं) से आ रहा है, और यह नाम एक डिफ़ॉल्ट फ़ाइल नाम के रूप में उपयोग करने के लिए एक डिफ़ॉल्ट नाम का उपयोग करता है (setSelectedFile() के साथ)। हालांकि, यह अंतिम अमान्य चरित्र से पहले कुछ भी छीनता है।

ये डिफ़ॉल्ट नाम कभी-कभी "मिमी/डीडी/वाई" प्रारूप में तिथियों के साथ समाप्त होते हैं, जो डिफ़ॉल्ट नाम में केवल "yy" छोड़ देता है, क्योंकि "/" वर्जित है। इस प्रकार, अपवादों की जांच करना वास्तव में एक विकल्प नहीं है, क्योंकि फ़ाइल स्वयं भी अभी तक नहीं बनाई गई है।

संपादित करें बिस: हम्म, बनाता है कि मुझे लगता है, अगर JFileChooser नाम को छोटा किया जाता है, यह शायद इस तरह के पात्रों की एक सूची तक पहुँच गया है, दिलचस्प है कि आगे की जांच करने के लिए किया जा सकता है।

संपादित करें ter: ठीक है, JFileChooser से स्रोतों की जांच करना पूरी तरह से सरल दिखाता है। टेक्स्ट फ़ील्ड के लिए, यह file.getName() का उपयोग करता है। यह वास्तव में अमान्य वर्णों की जांच नहीं करता है, यह बस इतना है कि यह पथ विभाजक के रूप में "/" लेता है, और केवल अंत, "वास्तविक फ़ाइल नाम" रखता है। अन्य वर्जित पात्र वास्तव में गुजरते हैं।

उत्तर

4

यह "वर्जित" वर्ण के साथ काम मैं नहीं बल्कि overcautious और प्रतिबंध होगा की बात आती है/सब "विशेष" अक्षर है कि किसी भी फाइल सिस्टम पर एक समस्या का कारण हो सकता बदलें।

तकनीकी रूप से अनुमति देने के बावजूद, कभी-कभी वे वर्ण अजीबता पैदा कर सकते हैं।

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

सारांश: फ़ाइल नामों में "विशेष" वर्ण -> अजीब त्रुटियों अंततः

होने की प्रतीक्षा में, सुनिश्चित करने के लिए एक ही रास्ता एक सफेद सूची का उपयोग करने के लिए है।

+0

"विशेष चरित्र" को परिभाषित करें। श्वेतसूची –

+0

+1 अधिकांश यूनिक्स-वाई फ़ाइल सिस्टम पर केवल प्रतिबंधित वर्ण '/' और नल-वर्ण '\ 0' हैं। –

+2

+1 के लिए –

-2

ओएस को एप्लिकेशन चालू करने के तरीके के बारे में कुछ जानकारी के लिए इस लिंक पर एक नज़र डालें। असल में आपको System.getProperty ("os.name") का उपयोग करने की आवश्यकता है और ऑपरेटिंग सिस्टम को खोजने के लिए बराबर() या युक्त() करें।

हालांकि कुछ थके हुए होने के बारे में यह है कि ओएस को जानना जरूरी नहीं है कि आप अंतर्निहित फाइल सिस्टम का उपयोग कर रहे हों, उदाहरण के लिए मैक FAT32 फ़ाइल सिस्टम को पढ़ और लिख सकता है।

स्रोत: http://www.mkyong.com/java/how-to-detect-os-in-java-systemgetpropertyosname/

2

कुछ "वर्जित वर्ण" होने के कारण फ़ाइल बनाने के दौरान कई चीजें गलत हो सकती हैं (अन्य पहुंच अधिकार और फ़ाइल और पथ नाम की लंबाई हैं)।

यह वास्तव में कुछ शुरुआती प्रयासों को पकड़ने और पकड़ने के लिए वास्तव में समझ में नहीं आता है जब आप दूसरों को तब तक पकड़ नहीं सकते जब तक कि आप वास्तव में फ़ाइल बनाने का प्रयास नहीं करते हैं। बस अपवादों को सही तरीके से संभाल लें।

+0

तथ्य यह है कि, यह नाम कुछ डेटा से पुनर्प्राप्त एक डिफ़ॉल्ट है, इसलिए इसमें ऐसे वर्ण हो सकते हैं जो फ़ाइल नाम के लिए उपयुक्त नहीं हैं। यह डिफ़ॉल्ट एक JFileChooser को दिया जाता है, और यह एक वर्जित चरित्र से पहले सबकुछ छीन रहा है। तो ऐसे मामले में, मुझे इन पात्रों को पहले प्रतिस्थापित करने की आवश्यकता होगी, ताकि डिफ़ॉल्ट व्यक्ति समझ में आता है। इस संदर्भ में, फ़ाइल को अभी तक नहीं बनाया गया था, क्योंकि कोई अपवाद फेंक दिया गया है। – Gnoupi

+1

क्या आप एक सुरक्षित डिफ़ॉल्ट नहीं बना सकते हैं? (केवल ascii-7 का उपयोग करने की तरह?)। दूसरी तरफ आप यह कर सकते हैं: 1) अपने उम्मीदवार को जेफाइल कूसर 2 में पास करें) कटा हुआ स्ट्रिंग (संवाद प्रदर्शित किए बिना) के लिए पूछें 3) यदि लौटाया गया फ़ाइल नाम छोटा है, तो आप जानते हैं कि वर्जित चार कहां है। – helios

+0

जेफाइल कूसर के साथ मेरा हिस्सा वास्तव में केवल एक समस्या थी जब पथ विभाजक का उपयोग करते हुए, जैसा कि अब मेरे प्रश्न में वर्णित है। अन्य वर्जित पात्रों के लिए, JfileChooser वास्तव में कुछ भी फ़िल्टर नहीं करता है, यह केवल फ़ाइल नाम के रूप में दर्ज किया गया है। आपका समाधान संभवतः सबसे आसान है, फ़ाइल को वास्तव में लिखने और अपवाद को संभालने का प्रयास करते समय बस जांचना। – Gnoupi

2

आप File.getCanonicalPath का उपयोग कर और (या जो भी से getAbsolutePath लिया गया है) मूल फ़ाइल नाम के साथ उसकी तुलना करने की कोशिश की है?

यह आपको वास्तविक वर्ण नहीं देगा, लेकिन यह यह निर्धारित करने में आपकी सहायता कर सकता है कि यह ओएस में एक वैध फ़ाइल नाम है या नहीं।

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

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