java.net.URISyntaxException

问题描述 投票:0回答:7

我遇到了这个例外。但这个异常没有再次重现。我想知道这是什么原因

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.

为什么会出现这个异常。怎么处理才不会重现。

java xml exception
7个回答
64
投票

有效的 URI 不包含反斜杠,如果它包含

:
,则第一个
:
之前的字符必须是“协议”。

基本上

"C:\Documents and Settings\All Users\.SF\config\sd.xml"
是一个路径名,而不是有效的 URI。

如果要将路径名转换为“文件:”URI,请执行以下操作:

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

这是在 Java 中将路径名转换为有效 URI 的最简单、最可靠和可移植的方法。 它应该可以在 Windows、Mac、Linux 和任何其他支持 Java 的平台上运行。 (涉及在路径名上使用字符串 bashing 的其他解决方案不可移植。)

但是您需要意识到“file:”URI 有许多注意事项,如

File.toURI()
方法的 javadoc 中所述。 例如,在一台计算机上创建的“文件:”URI 通常表示另一台计算机上的不同资源(或根本没有资源)。


12
投票

此问题的根本原因是文件路径包含正斜杠,而不是 Windows 中的反斜杠。

尝试这样解决问题:

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

8
投票

你必须有这样的字符串:

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

1
投票

它需要一个带有类型/协议的完整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.

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


0
投票

在命令行上将 URI 传递给脚本时,我遇到了相同的“不透明”错误。这是在窗户上。我必须使用正斜杠,而不是反斜杠。这为我解决了这个问题。


0
投票

它也不喜欢空格,必须是 / 而不是 \ 或 `\ 或 //

zipFilePath =“C:/test/v”;


0
投票

我遇到了类似的错误。我正在使用 JavaFX Filechooser 返回选定的文件,并且通过该文件,我尝试设置媒体播放器的实例,并将 selectedFile 传递给它。为了解决该错误,我添加了 (selectedFile).toURI().toString() 并将其传递给媒体播放器,现在我可以选择位于系统上任何位置的任何音频文件。

© www.soinside.com 2019 - 2024. All rights reserved.