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.
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.
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("\\", "/");
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);
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.
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.