2014-01-07 50 views
-1

所以我正在學習如何解析Java中的XML文件,我開始使用此:爲什麼在解析java中的xml文件時需要包含ClassLoader.getSystemResourcesAsStream()?

public class XMLParser { 
    public static void main(String args[]) throws Exception { 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(ClassLoader.getSystemResourceAsStream("yql.xml")); 


    } 
} 

我不能確定,爲什麼我需要使用ClassLoader.getSystemResourceAsStream(「yql.xml」) 。我在網上找到了這個解決方案,因爲我不能只使用builder.parse(「yql.xml」)。我的問題是:爲什麼我在閱讀XML文件時需要包含這一行?它是做什麼的,是否有一種更簡單的方法來使用DOM讀取XML而不使用ClassLoader?

+2

'它做什麼'從閱讀javadoc開始。 –

+0

只有當XML文件嵌入到應用程序上下文中或資源已知存在於應用程序的類路徑上下文中時,才需要它... – MadProgrammer

+0

驗收將被接受! –

回答

2

您應將XML讀取爲InputStream以將其傳遞給DOM解析器。

唯一的一點是XML文件的位置,根據每個位置您可以使用不同的機制。

如果您知道XML文件的確切位置,你想在你的應用程序,你可以不喜歡硬編碼:如果你是存儲在類路徑中的XML

InputSteram is = new FileInputStream("/path/to/xml/file.xml"); 

(你之間類或包含在類路徑中的JAR文件),您可以通過正確的ClassLoader找到它。

InputSream is = ClassLoader.getSystemResourceAsStream("yql.xml"); 

如果你正在開發一個Web應用程序和XML是你的WEB-INF文件夾,您應使用類似:

InputStream is = servletContext.getResourceAsStream("/WEB-INF/relative/path/to/xml/file.xml"); 

等(可能還有其他的解決方案,如檢索來自URL的XML,從ZIP文件中讀取,...)。

所以使用ClassLoader不是必須的,它完全取決於你的項目+ XML文件的佈局。

0
ClassLoader.getSystemResourceAsStream(String name) 

用於從類路徑讀取資源作爲流。使用它的一個優點是它可以避免硬編碼文件的路徑。所以當你使用這個statemet時:

ClassLoader.getSystemResourceAsStream("yql.xml") 

你實際上並沒有給出你的yql.xml的完整/相對路徑。如果你的文件存在於類路徑中,那麼它將被提取。

相關問題