2009-06-18 11 views
30

में फ़ाइल स्थान से फ़ाइल का नाम प्राप्त करें मेरे पास String है जो फ़ाइल (फ़ाइल नाम सहित) के लिए एक पूर्ण पथ प्रदान करता है। मैं सिर्फ फाइल का नाम प्राप्त करना चाहता हूं। ऐसा करने का सबसे आसान तरीका क्या है?जावा

इसे जितना संभव हो उतना सामान्य होना चाहिए क्योंकि मैं पहले से नहीं जानता कि यूआरएल क्या होगा। मैं बस एक यूआरएल ऑब्जेक्ट नहीं बना सकता और getFile() का उपयोग नहीं कर सकता - हालांकि यह संभव था कि यह आदर्श होगा यदि यह संभव था - क्योंकि यह आवश्यक नहीं है http:// उपसर्ग यह सी:/या कुछ समान हो सकता है।

उत्तर

78
new File(fileName).getName(); 

या

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/"); 
return idx >= 0 ? fileName.substring(idx + 1) : fileName; 

सूचना है कि पहले समाधान प्रणाली निर्भर है। यह केवल सिस्टम के पथ विभाजक चरित्र को खाते में ले जाता है। तो यदि आपका कोड यूनिक्स सिस्टम पर चलता है और विंडोज पथ प्राप्त करता है, तो यह काम नहीं करेगा। इंटरनेट एक्सप्लोरर द्वारा फाइल अपलोड को संसाधित करते समय यह मामला है। हालांकि java.io.File वर्ग मूल बातें प्रदान करता है

+1

आप जानते हैं, तंग परियोजना देय तिथियां आपको तेजी से लिखने के लिए सिखाती हैं। – akarnokd

+10

पहला प्रतिस्थापन सभी पैरामीटर गलत है क्योंकि स्लैश जावा स्ट्रिंग और नियमित अभिव्यक्तियों में दोनों से बचने वाला चरित्र है। यह fileName.replaceAll होना चाहिए ("\\\\", "/") ... – Ivan

+3

इसके अलावा, इस तथ्य के बावजूद यह कितनी बार स्वीकार किया गया था कि उपस्ट्रिंग को ऊंट नहीं किया जाना चाहिए और सभी लोअरकेस को "सबस्ट्रिंग" करना चाहिए मूल स्ट्रिंग एपीआई की सबस्ट्रिंग विधि तक पहुंचें, जब तक कि आप यहां कुछ और उपयोग नहीं कर रहे हैं लेकिन शायद यह ध्यान दिया जाना चाहिए। – bcmoney

17

Apache Commons IO, FilenameUtils वर्ग जिसे आप आसानी से फ़ाइल नाम के विभिन्न घटकों प्राप्त करने के लिए उपयोगिता कार्यों का एक बहुत समृद्ध सेट देता है प्रदान करता है।

+1

हमेशा इसका उपयोग करें। शिकायत नहीं कर सकता –

1

से यहाँ 2 तरीके हैं (दोनों ओएस स्वतंत्र हैं।)

Paths का उपयोग करना:

: 1,7

Path p = Paths.get(<Absolute Path of Linux/Windows system>); 
String fileName = p.getFileName().toString(); 
String directory = p.getParent().toString(); 

का उपयोग FilenameUtils अपाचे कॉमन्स आईओ में के बाद से

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt"); 
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");