2011-11-30 15 views
12

से यूआरआई प्राप्त करें मुझे जावा का बहुत कम ज्ञान है। मुझे विंडोज़ पर FilePath(String) से यूआरआई का स्ट्रिंग प्रस्तुति बनाने की आवश्यकता है। कभी-कभी inputFilePath मुझे मिलता है: file:/C:/a.txt और कभी-कभी यह है: C:/a.txt। अभी, मैं क्या कर रहा हूँ है: पथ, जो file:/ उपसर्ग के साथ नहीं कर रहे हैं के लिए ठीकजावा: फ़ाइलपाथ

new File(inputFilePath).toURI().toURL().toExternalForm() 

ऊपर काम करता है, लेकिन पथ के लिए file:/, उपसर्ग के साथ। toURI विधि वर्तमान डीआईआर के मूल्य को जोड़कर, इसे एक अवैध यूआरआई में परिवर्तित कर रही है, और इसलिए पथ अमान्य हो गया है।

कृपया दोनों प्रकार के पथों के लिए उचित यूआरआई प्राप्त करने का सही तरीका सुझाकर मेरी मदद करें।

+1

क्या मौजूद होने पर स्ट्रिंग की शुरुआत से 'फ़ाइल:/'को हटाने के लिए पर्याप्त होगा? या हो सकता है कि अन्य मान्य उपसर्ग हो? – Thomas

उत्तर

1

new File(String) पर तर्क एक पथ है, यूआरआई नहीं। इसलिए 'लेकिन' के बाद आपकी पोस्ट का हिस्सा एपीआई का अमान्य उपयोग है।

+0

तो मुझे यूआरआई को पथ में बदलने के लिए क्या करना चाहिए? अनिवार्य रूप से, एक पथ प्राप्त करने के लिए जो "फ़ाइल:" – HarshG

+0

@ user1073005 'नया यूआरआई (यूरी) .getPath()' है, लेकिन यह एक नया सवाल है, है ना? ऊपर आपका प्रश्न यह है कि 'यूआरआई के स्ट्रिंग प्रस्तुति को कैसे बनाएं'। – EJP

+0

दहन के लिए खेद है ... – HarshG

0
class TestPath { 

    public static void main(String[] args) { 
     String brokenPath = "file:/C:/a.txt"; 

     System.out.println(brokenPath); 

     if (brokenPath.startsWith("file:/")) { 
      brokenPath = brokenPath.substring(6,brokenPath.length()); 
     } 
     System.out.println(brokenPath); 
    } 
} 

उत्पादन देता है:

file:/C:/a.txt   <- On Windows 
file:///C:/a.txt   <- On Windows 
file:///home/user/a.txt <- On Linux 

तो तुम लिनक्स के लिए विंडोज के लिए file:/ या file:/// और file:// दूर करने के लिए की आवश्यकता होगी:

file:/C:/a.txt 
C:/a.txt 
Press any key to continue . . . 
+0

मैं अपाचे कॉमन्स 'स्ट्रिंगउटिल.removeStart (...)' का उपयोग करने का सुझाव दूंगा: 'टूटापाथ = स्ट्रिंगयूटिल .removeStart (टूटापाथ, "फ़ाइल: /") '। – Thomas

4

SAXLocalNameCount.java से https://jaxp.java.net से:

/** 
* Convert from a filename to a file URL. 
*/ 
private static String convertToFileURL (String filename) 
{ 
    // On JDK 1.2 and later, simplify this to: 
    // "path = file.toURL().toString()". 
    String path = new File (filename).getAbsolutePath(); 
    if (File.separatorChar != '/') 
    { 
     path = path.replace (File.separatorChar, '/'); 
    } 
    if (!path.startsWith ("/")) 
    { 
     path = "/" + path; 
    } 
    String retVal = "file:" + path; 

    return retVal; 
} 
+0

कमाल, एक आकर्षण की तरह काम करता है! – Andrei

+3

JavaSE7 के बाद से है कि एक लाइन ... \t \t 'java.nio.file.FileSystems.getDefault()। GetPath (xmlFileAsString) .toAbsolutePath()। Touri()' \t \t रिटर्न जैसे। '" File: /// C: /develop/doku/projects/Documentry/THB/src/docbkx/Systemvoraussetzungen.xml "' – udoline

3

बस का उपयोग Normalize();

उदाहरण:

path = Paths.get("/", input).normalize(); 

इस एक लाइन अपने सभी रास्तों सामान्य होगा।