2010-05-18 4 views
14

Ich habe diese Ausnahme bekommen. aber diese Ausnahme wird nicht erneut reproduziert. Ich möchte die Ursache dafür erhaltenjava.net.URISyntaxException

Warum diese Ausnahme aufgetreten ist. Wie man damit umgeht, damit es sich nicht reproduziert.

+1

versucht, die '\\' zu entkommen? – aioobe

Antwort

30

Grundsätzlich ist "C:\Documents and Settings\All Users\.SF\config\sd.xml" ein Pfadname und kein gültiger URI. Wenn Sie einen Pfad in eine „file:“ aktivieren möchten URI, dann gehen Sie wie folgt vor:

File f = new File("C:\Documents and Settings\All Users\.SF\config\sd.xml"); 
URI u = f.toURI(); 

Dies ist die einfachste und zuverlässigste und tragbare Art und Weise einen Pfadnamen in einen gültigen URI in Java zu drehen.

Aber Sie müssen erkennen, dass "Datei:" URIs haben eine Reihe von Vorbehalten, wie in den Javadocs für die File.toURI() Methode beschrieben. Zum Beispiel bezeichnet ein "Datei:" - URI, der auf einem Rechner erstellt wurde, normalerweise eine andere Ressource (oder überhaupt keine Ressource) auf einem anderen Rechner.

3

Sie müssen die Zeichenfolge haben wie so:

String windowsPath = file:/C:/Users/sizu/myFile.txt; 
URI uri = new URI(windowsPath); 
File file = new File(uri); 

Normalerweise Menschen etwas tun, wie folgt aus:

String windowsPath = file:C:/Users/sizu/myFile.txt; 
URI uri = new URI(windowsPath); 
File file = new File(uri); 

oder etwas ähnliches:

String windowsPath = file:C:\Users\sizu\myFile.txt; 
URI uri = new URI(windowsPath); 
File file = new File(uri); 
+0

Für mich unter Windows 8 funktionierte der "file: C: \" Ansatz nicht, aber "file: C: /" funktionierte. Vielen Dank! :) –

0

hatte ich die gleiche "Opaque" -Fehler beim Übergeben eines URI in der Befehlszeile an ein Skript. Das war auf Windows. Ich musste Schrägstriche benutzen, NICHT Backslashes. Das hat es für mich gelöst.

8

Die Ursache dafür ist, dass der Dateipfad die Vorwärtsstriche anstelle von Rückwärtsstrichen in Fenstern enthält.

Versuchen Sie, wie das Problem zu beheben:

"file:" + string.replace("\\", "/"); 
0

Es braucht eine komplette uri mit Typ/Protokoll z

file:/C:/Users/Sumit/Desktop/s%20folder/SAMPLETEXT.txt 


File file = new File("C:/Users/Sumit/Desktop/s folder/SAMPLETEXT.txt"); 
file.toURI();//This will return the same string for you. 

ich eher direkte Zeichenfolge verwenden Erstellen zusätzliche Dateiobjekt zu vermeiden.

Verwandte Themen