मुझे उपयोगकर्ता से इनपुट के रूप में, एक निश्चित फ़ाइल का पथ मिलता है।
उपयोगकर्ता को इस फ़ाइल तक पहुँचने की अनुमति केवल तभी दी जाती है, जब फ़ाइल एक निश्चित पैरेंट-फ़ोल्डर "उपयोगकर्ता/" के अंदर हो।
उदाहरण के लिए:
- "उपयोगकर्ता/1/2/3" अच्छा है।
- "उपयोगकर्ता/1/../2" अच्छा है।
- "उपयोगकर्ता/1/../../2" अच्छा नहीं है ("उपयोगकर्ता/" फ़ोल्डर के बाहर जाता है)।
- "माता-पिता/../उपयोगकर्ता/1/2/3" अच्छा है।
जावा में इसे जांचने का कोई आसान तरीका है?
3 जवाब
कैसा रहेगा:-
boolean allowed = new File("the/path").getCanonicalPath().contains("User/");
getCanonicalPath()
पूरा पथ लौटाता है, इसलिए यह "c:\folder\User" जैसा कुछ होगा।
आप एक File
दिए गए पथनाम और लूप से File#getParent()
चेन:
public boolean check(final String pathname) throws IOException {
for(File target = new File(pathname).getCanonicalFile();
null != target;
target = target.getParentFile()) {
if("User".equals(target.getName())) {
return true;
}
}
return false;
}
बस File#getCanonicalFile()
का उपयोग करके दिए गए पथनाम को हल करना याद रखें।
आप File#getCanonicalPath
का इस्तेमाल कर सकते हैं. नीचे आप इसके जावाडोक का एक अंश पा सकते हैं।
इस सार पथनाम की विहित पथनाम स्ट्रिंग लौटाता है। ए विहित पथनाम निरपेक्ष और अद्वितीय दोनों है। सटीक परिभाषा विहित रूप प्रणाली पर निर्भर है। यह विधि पहले इसे परिवर्तित करती है यदि आवश्यक हो तो निरपेक्ष रूप में पथनाम, जैसे कि का आह्वान करके गेटएब्सोल्यूटपाथ () विधि, और फिर इसे अपने अद्वितीय रूप में मैप करता है a सिस्टम-निर्भर तरीका। इसमें आमतौर पर अनावश्यक नामों को हटाना शामिल होता है जैसे कि "।" और ".." पथनाम से, सांकेतिक लिंक का समाधान (on .) UNIX प्लेटफॉर्म), और ड्राइव अक्षरों को एक मानक मामले में परिवर्तित करना (on .) माइक्रोसॉफ्ट विंडोज प्लेटफॉर्म)।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।
normalize
के बादstartsWith
, देखें docs .oracle.com/javase/tutorial/आवश्यक/io/pathOps.html