2011-09-01 14 views
10

मैं उपयोगकर्ता द्वारा प्रदान की गई फ़ाइल नाम (पूर्ण या रिश्तेदार) और पर्यावरण निर्भर आधार निर्देशिका के आधार पर जावा फ़ाइल ऑब्जेक्ट बनाने की कोशिश कर रहा हूं।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 

जिसका मतलब है मैं (यदि फ़ाइल मौजूद है को देखने के लिए या कम से कम विभिन्न विकल्पों परीक्षण) सटीक रिश्तेदार पथ यह पता लगाने की है। क्या मैं जावाडोक को गलत समझ रहा हूं?

+0

बच्चे पथनाम को एक सापेक्ष पथनाम होना चाहिए। स्लेश बनाम बैकस्लाश के बारे में रूपांतरण वार्ता, मुझे लगता है। आपके मामले में, आपको यह पता लगाना होगा कि आगे बढ़ने से पहले पथ पूर्ण है या नहीं। – Thilo

+0

यदि आप आगे-संघर्ष का उपयोग करने के बजाय (अधिक सही) '" सी: \\ टेम्प "और' "सी: \\ Temp \\ file.txt" का उपयोग करते हैं तो व्यवहार समान होता है? मेरे पास इस समय एक जेडीके स्थापित विंडोज पीसी नहीं है, इसलिए मैं इसका परीक्षण नहीं कर सकता। इसके अलावा: 'नई फ़ाइल ("सी:/टेम्प") क्या है। एब्सोल्यूट() 'प्रिंट? –

+0

@ जोचिम: दोनों "सी:/टेम्प" और '" सी: \\ टेम्प "दोनों का इलाज समान है। 'नई फ़ाइल ("सी:/टेम्प")। isbsolute() 'प्रिंट' सत्य 'है। – Geert

उत्तर

7

अगर बच्चे पथ स्ट्रिंग निरपेक्ष है तो यह एक ऐसी प्रणाली पर निर्भर रास्ते में एक रिश्तेदार पथ नाम में बदल जाती है।

मैं इसका मतलब यह है कि भले ही आप एक पूर्ण पथ प्रदान करते हैं यह (एक प्रणाली निर्भर तरीके से) में परिवर्तित हो जाएगा, और के रूप में, एक रिश्तेदार पथ इलाज किया मान।

जिसका मतलब है मैं (यदि फ़ाइल मौजूद है को देखने के लिए या कम से कम विभिन्न विकल्पों परीक्षण) सटीक रिश्तेदार पथ यह पता लगाने की है।

हाँ, मुझे विश्वास है।

यह शायद आसानी से अगर यह parent में एक निर्देशिका करने के लिए एक निरपेक्ष पथ है की जाँच करने के

file.getAbsolutePath().startsWith(parent.getAbsolutePath()); 

के साथ किया जा सकता है, और

file.getAbsolutePath().substring(parent.getAbsolutePath().length()); 

रिश्तेदार हिस्सा मिलता है।

+0

हम्म, आप कह सकते हैं कि पूर्ण पथ को एक सापेक्ष पथ के रूप में माना जाता है (यह निश्चित रूप से ऐसा लगता है)। यह एक शर्म की बात होगी (और खराब जावाडॉक imho ;-))। मैं आपके सुझावों के बारे में गड़बड़ करूँगा यह देखने के लिए कि मेरे लिए क्या काम करता है, धन्यवाद! – Geert

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