2012-11-08 12 views
6

/a/./b/c/../d जैसे पथ को देखते हुए, मैं सभी "वर्तमान निर्देशिका" संकेतक (यानी, अवधि) और "मूल निर्देशिका" को हटाना चाहता हूं संकेतक (यानी ..), a/b/d दे रहे हैं।सिग्नलिंक को हल किए बिना मूल निर्देशिका विनिर्देशक ("डॉट डॉट") के साथ पथ नाम हल करें

मैं File.getCanonicalPath() का उपयोग कर सकता हूं, लेकिन यह सिम्लिंक भी हल करता है, जो मैं नहीं चाहता।

कोई आसान तरीका? यह एक टोकननाइज़र लिखने और इसे स्वयं संभालने से सरल है।

बोनस पॉइंट यदि आप मुझे बता सकते हैं कि '।' के लिए सही नाम क्या है। और '..' इस संदर्भ में हैं।

उत्तर

3

आप Apache Commons IO लाइब्रेरी में see javadoc here का उपयोग कर सकते हैं।

"डॉट" (.) वर्तमान निर्देशिका है और "डॉट डॉट" (..) मूल निर्देशिका है - read up on unix directories

+0

'getAbsolutePath'' .' या '..' को हल नहीं करता है - यह केवल सुनिश्चित करता है कि पथ पूर्ण है। '..' के साथ पथ अभी भी पूर्ण हो सकते हैं, जैसा कि मेरे उदाहरण में है। – BeeOnRope

+0

क्षमा करें, अपना प्रश्न गलत बनाएं, मेरा संपादन देखें। – doublesharp

+0

धन्यवाद। स्पष्टीकरण के लिए मैं अच्छी तरह से जानता हूं कि '.' और' ..' क्या हैं। मेरा मतलब था कि इन प्रश्नों के शीर्षक में, विशेष रूप से इनके डॉट रूपों को _call_ क्या करना है। – BeeOnRope

6

गुवा के पास यह भी Files.simplifyPath(String) है। आपकी सबसे अच्छी शर्त, हालांकि, यदि आप जेडीके 7 का उपयोग कर सकते हैं) Path के रूप में अपने पथ का प्रतिनिधित्व करना है और सामान्य संस्करण प्राप्त करने के लिए Path.normalize() का उपयोग करना है।

+0

धन्यवाद। यह वास्तव में मेरे लिए बहुत उपयोगी है क्योंकि हम अमरूद पर निर्भर करते हैं लेकिन वर्तमान में कॉमन्स-आईओ नहीं। जावा 7 पर नहीं, लेकिन लिंक बहुत जानकारीपूर्ण था। मैंने एक /../ बी के मामले के बारे में सोचा नहीं था जहां एक सिम्लिंक है। – BeeOnRope

0

भी इस सवाल (जावा 7 या नया) पर एक नज़र डालें: Java: how to normalize paths with nio Path?

समाधान महान है, लेकिन यह (यह Windows मशीनों पर काम नहीं करेगा) पोर्टेबल नहीं है।

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