web-dev-qa-db-fra.com

java.net.URISyntaxException

J'ai cette exception. mais cette exception n'est plus reproduite. Je veux avoir la cause de cela 

Exception Caught while Checking tag in XMLjava.net.URISyntaxException:
Illegal character in opaque part at index 2:
C:\Documents and Settings\All Users\.SF\config\sd.xml
stacktrace net.sf.saxon.trans.XPathException.

Pourquoi cette exception s'est produite Comment traiter afin qu'il ne se reproduise pas.

20
aayushi soni

Fondamentalement, "C:\Documents and Settings\All Users\.SF\config\sd.xml" est un chemin, et non un URI valide. Si vous voulez transformer un chemin en un "fichier:" URI, procédez comme suit:

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

C'est le moyen le plus simple, le plus fiable et le plus portable de convertir un chemin en un URI valide en Java. 

Mais vous devez comprendre que "fichier:" Les URI ont un certain nombre de réserves, comme décrit dans les javadocs de la méthode File.toURI() . Par exemple, un URI "fichier:" créé sur une machine désigne généralement une ressource différente (ou aucune ressource) sur une autre machine.

38
Stephen C

La cause principale en est que chemin du fichier contient les barres obliques au lieu de barres obliques dans Windows.

Essayez comme ceci pour résoudre le problème:

"file:" + string.replace("\\", "/");  
10
Ankireddy Polu

Vous devez avoir la chaîne comme ceci:

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

Habituellement, les gens font quelque chose comme ça:

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

ou quelque chose comme ça:

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

J'ai eu la même erreur "opaque" en passant un URI sur la ligne de commande à un script. C'était sur les fenêtres. J'ai dû utiliser des barres obliques, PAS des barres obliques inverses. Cela l'a résolu pour moi.

0
britt

Il nécessite un uri complet avec type/protocole

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.

Je vais plutôt utiliser une chaîne directe pour éviter de créer un objet fichier supplémentaire.

0
sampopes