2010-05-18 57 views
14

我得到這個異常。但這個例外不會再次複製。我想得到這個原因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

試圖逃脫'\\'? – aioobe 2010-05-18 10:22:27

回答

30

基本上"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最可靠,最簡便的方式。

但是,您需要認識到「file:」URI有一些注意事項,如File.toURI()方法的javadoc中所述。例如,在一臺機器上創建的「file:」URI通常表示另一臺機器上的不同資源(或根本沒有資源)。

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

對於我在Windows 8上,「file:C:\」方法無效,但「file:C:/」正在工作。謝謝! :) – 2014-02-04 10:32:52

0

我有同樣的將命令行上的URI傳遞給腳本時出現「不透明」錯誤。這是在窗戶上。我不得不使用正斜槓,而不是反斜槓。這爲我解決了它。

8

造成這種情況的根本原因是文件路徑在Windows中包含正斜槓而不是反斜槓。

嘗試這樣來解決問題:

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

它需要一個完整的URI類型/協議 e.g

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. 

我更喜歡用直接的字符串,以避免產生額外的文件對象。

相關問題