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.
Я предпочел бы использовать прямую строку, чтобы избежать создания дополнительного файлового объекта.