मैं उपयोगकर्ता द्वारा प्रदान की गई फ़ाइल नाम (पूर्ण या रिश्तेदार) और पर्यावरण निर्भर आधार निर्देशिका के आधार पर जावा फ़ाइल ऑब्जेक्ट बनाने की कोशिश कर रहा हूं।java.io.File (पैरेंट, बच्चा) अपेक्षित काम नहीं करता
अगर बच्चे पथ स्ट्रिंग निरपेक्ष है तो यह एक प्रणाली पर निर्भर रास्ते में एक रिश्तेदार पथ नाम में बदल जाता है: java.io.File (फ़ाइल माता पिता, स्ट्रिंग बच्चे) के लिए जावा दस्तावेज़ निम्नलिखित कहते हैं।
जो मुझे लगता है कि अगर मैं निम्नलिखित कोड है बनाया:
public class TestClass {
public static void main(String[] args) throws IOException {
File file = new File(new File("C:/Temp"),"C:/Temp/file.txt");
System.out.println(file.getAbsolutePath());
}
}
उत्पादन
C:\Temp\file.txt
होगा और उसके बाद मैं व्यापार में होगी क्योंकि यह वास्तव में बात नहीं होता अब अगर उपयोगकर्ता एक पूर्ण या सापेक्ष पथ प्रदान करता है। लेकिन वास्तव में, उत्पादन
C:\Temp\C:\Temp\file.txt
जिसका मतलब है मैं (यदि फ़ाइल मौजूद है को देखने के लिए या कम से कम विभिन्न विकल्पों परीक्षण) सटीक रिश्तेदार पथ यह पता लगाने की है। क्या मैं जावाडोक को गलत समझ रहा हूं?
बच्चे पथनाम को एक सापेक्ष पथनाम होना चाहिए। स्लेश बनाम बैकस्लाश के बारे में रूपांतरण वार्ता, मुझे लगता है। आपके मामले में, आपको यह पता लगाना होगा कि आगे बढ़ने से पहले पथ पूर्ण है या नहीं। – Thilo
यदि आप आगे-संघर्ष का उपयोग करने के बजाय (अधिक सही) '" सी: \\ टेम्प "और' "सी: \\ Temp \\ file.txt" का उपयोग करते हैं तो व्यवहार समान होता है? मेरे पास इस समय एक जेडीके स्थापित विंडोज पीसी नहीं है, इसलिए मैं इसका परीक्षण नहीं कर सकता। इसके अलावा: 'नई फ़ाइल ("सी:/टेम्प") क्या है। एब्सोल्यूट() 'प्रिंट? –
@ जोचिम: दोनों "सी:/टेम्प" और '" सी: \\ टेम्प "दोनों का इलाज समान है। 'नई फ़ाइल ("सी:/टेम्प")। isbsolute() 'प्रिंट' सत्य 'है। – Geert