Java.net.URISyntaxException

У меня есть это исключение. но это исключение не воспроизводится снова. Я хочу получить причину этого

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.

Почему произошло это исключение. Как бороться с этим, он не будет воспроизводиться.

Ответы

Ответ 1

В основном "C:\Documents and Settings\All Users\.SF\config\sd.xml" - это путь, а не допустимый URI. Если вы хотите включить путь в URI "file:", выполните следующие действия:

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

Это самый простой и надежный и переносимый способ превратить путь в допустимый URI на Java.

Но вам нужно понять, что в "файлах:" URI есть несколько предостережений, как описано в javadocs для метода File.toURI(), Например, URI "файл:", созданный на одной машине, обычно обозначает другой ресурс (или вообще никакого ресурса) на другой машине.

Ответ 2

Коренной причиной этого является путь к файлу, который содержит косые черты вместо обратных косов в окнах.

Попробуйте сделать это, чтобы решить проблему:

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

Ответ 3

У вас должна быть строка вроде:

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

Обычно люди делают что-то вроде этого:

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

или что-то вроде этого:

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

Ответ 4

У меня была такая же "непрозрачная" ошибка при передаче URI в командной строке на script. Это было на окнах. Мне пришлось использовать косые черты, а не обратную косую черту. Это разрешило это для меня.

Ответ 5

Ему нужен полный uri с типом/протоколом например,

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.

Я предпочел бы использовать прямую строку, чтобы избежать создания дополнительного файлового объекта.