java.net.URISyntaxException

时间:2010-05-18 09:51:01

标签: java xml exception

我得到了这个例外。但是这个例外不再重现。我想得到这个

的原因
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.

为什么发生这种异常。如何处理它不会重现。

6 个答案:

答案 0 :(得分:39)

基本上"C:\Documents and Settings\All Users\.SF\config\sd.xml"是路径名,而不是有效的URI。如果要将路径名转换为“file:”URI,请执行以下操作:

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

这是在Java中将路径名转换为有效URI的最简单,最可靠和最便携的方法。

但是您需要意识到“file:”URI有许多警告,如File.toURI()方法的javadoc所述。例如,在一台机器上创建的“file:”URI通常表示另一台机器上的不同资源(或根本没有资源)。

答案 1 :(得分:11)

这个的根本原因是文件路径包含正斜杠而不是窗口中的反斜杠。

尝试这样解决问题:

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

答案 2 :(得分:5)

你必须有这样的字符串:

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);

答案 3 :(得分:0)

在将命令行上的URI传递给脚本时,我遇到了相同的“opaque”错误。这是在Windows上。我不得不使用正斜杠,而不是反斜杠。这解决了我。

答案 4 :(得分:0)

它需要一个完整的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.

我宁愿使用直接字符串来避免创建额外的文件对象。

答案 5 :(得分:0)

我遇到了这个问题,因为我的路径有空白

一旦我删除了对我有用的文件路径中的空白。

Caused by: java.net.URISyntaxException: Illegal character in path at index 45: file:/var/lib/jenkins/workspace/Engine Release/target/classes/com/app/model/script/ScriptEngineScript.class
at java.net.URI$Parser.fail(URI.java:2848) ~[?:1.8.0_191]
at java.net.URI$Parser.checkChars(URI.java:3021) ~[?:1.8.0_191]
at java.net.URI$Parser.parseHierarchical(URI.java:3105) ~[?:1.8.0_191]
at java.net.URI$Parser.parse(URI.java:3053) ~[?:1.8.0_191]
at java.net.URI.<init>(URI.java:588) ~[?:1.8.0_191]
at java.net.URL.toURI(URL.java:946) ~[?:1.8.0_191]
at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:70) ~[groovy-2.5.11.jar:2.5.11]