2014-05-18 50 views
1

我試圖從本地XML文件創建文檔對象。getSystemResourceAsStream在解析XML時返回null

我的這部分代碼:

DocumentBuilderFactory factoria = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder constructor = factoria.newDocumentBuilder(); 
    Document documento = constructor.parse(ClassLoader.getSystemResourceAsStream(URLXML)); 

導致以下異常:在線程

例外 「AWT-EventQueue的 - 0」 java.lang.IllegalArgumentException異常:InputStream中不能在零 javax.xml.parsers.DocumentBuilder.parse(Unknown Source)

getSystemResourceAsStr eam()只能在找不到源代碼時返回null,並且我已檢查過文件url是否正確存儲在字符串中(它是C:\ file.xml,它是文件的正確位置)。

那麼什麼是失敗?我究竟做錯了什麼?

+0

你爲什麼要問* classloader *這個資源呢?這聽起來像你剛剛得到了一個文件名而不是資源名......所以爲什麼不使用'FileInputStream'? –

+0

我在問類加載器,因爲根據我讀的信息不使用它可能會導致某些操作系統的可移植性問題。 C:\ file.xml不是有效的資源名稱嗎?那麼什麼是正確的資源名稱? – kace91

+3

這不是一個有效的資源名稱,並且這不是類加載器可能會用到的東西。如果你擔心可移植性,'c:\ file.xml'在大多數操作系統上不會是一個有效的文件。如果您正在嘗試加載文件,只需使用FileInputStream,並確保爲您使用的系統指定了適當的文件名。 –

回答

0

將file.xml保存在classpath中。如果您的Web應用程序是Web應用程序,或將其保存在執行獨立應用程序的java命令的文件夾中,請將其保留在WEB-INF中。

+0

根據你的建議,我已經嘗試了類路徑中的文件,但結果似乎是相同的。 – kace91

+0

你可以簡單介紹一下你的環境......你使用的是任何IDE嗎?是Web應用還是獨立應用...? – durgas

+0

這是一個獨立的應用程序。我正在使用java 1.7。我正在使用Eclipse(kepler),這是我運行代碼的地方。 – kace91

-1

我遇到使用getSystemResourceAsStream同樣的錯誤,所以不是用,我用:

parser.parse(new File(""), handler); 

它工作得很好。