जावा 7+ में पिछले उत्तरों में से कुछ को केवल अंतिम सेगमेंट के बजाय URI से किसी भी पथ खंड की पुनर्प्राप्ति की अनुमति देने के लिए जोड़ा जा सकता है । हम URI को किसी java.nio.file.Pathऑब्जेक्ट में बदल सकते हैं , इसकी getName(int)विधि का लाभ उठाने के लिए ।
दुर्भाग्यवश, Paths.get(uri)http कारखाने को संभालने के लिए स्थैतिक कारखाना नहीं बनाया गया है, इसलिए हमें पहले इस योजना को URI के मार्ग से अलग करने की आवश्यकता है।
URI uri = URI.create("http://base_path/some_segment/id");
Path path = Paths.get(uri.getPath());
String last = path.getFileName().toString();
String secondToLast = path.getName(path.getNameCount() - 2).toString();
कोड की एक पंक्ति में अंतिम खंड प्राप्त करने के लिए, बस ऊपर की पंक्तियों को घोंसले में रखें।
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
इंडेक्स नंबरों से बचने और ऑफ-बाय-वन त्रुटियों के लिए दूसरे-से-अंतिम सेगमेंट को प्राप्त करने के लिए, getParent()विधि का उपयोग करें ।
String secondToLast = path.getParent().getFileName().toString();
नोट getParent()विधि को रिवर्स ऑर्डर में सेगमेंट प्राप्त करने के लिए बार-बार बुलाया जा सकता है। इस उदाहरण में, पथ में केवल दो खंड हैं, अन्यथा कॉलिंग getParent().getParent()तीसरे-से-अंतिम खंड को पुनर्प्राप्त करेगी।