2010-04-04 43 views
5

我正在用Java編寫一個程序,我從XML文件中讀取數據並解析它。該文件被導入到我的項目的src目錄中名爲「Resources」的文件夾中。我正在使用Eclipse。當我運行該程序,我得到以下錯誤:FileNotFoundException在讀取.xml文件進行解析時

java.io.FileNotFoundException: /Users/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml (No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:106) 
at java.io.FileInputStream.<init>(FileInputStream.java:66) 
... 

相關的代碼是在這裏:

private void parseXML() { 
    //Get a factory 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

    try { 
     //Use factory to get a new DocumentBuilder 
     DocumentBuilder db = dbf.newDocumentBuilder(); 

     //Parse the XML file, get DOM representation 
     dom = db.parse("resources/majors_xml_db.xml"); 
    } catch(ParserConfigurationException pce) { 
     pce.printStackTrace(); 
    } catch(SAXException se) { 
     se.printStackTrace(); 
    } catch(IOException ioe) { 
     ioe.printStackTrace(); 
    } 
} 

我不明白爲什麼我得到FileNotFoundException異常時,該文件是存在的。謝謝您的幫助。

+1

這可能不是問題,但我想我會注意到,在您的描述中,您稱之爲「資源」文件夾,在代碼中它是「資源」。在具有區分大小寫路徑的操作系統上,這可能會導致問題。 – Ash 2010-04-04 22:22:49

+0

大寫是一個錯字。這是兩個地方的「資源」。 – ericso 2010-04-04 23:08:25

+0

您是否嘗試過使用此指令? System.getProperty(「user.dir」) – 2010-04-05 03:39:05

回答

6

使用DocumentBuilder.parse(String),參數被解釋爲一個URI,在這種情況下,它將是一個相對URI(您給它的字符串不是「完整的」URI)。它相對於在這一點上有點模糊,沒有關於你的設置的進一步信息。運行時將解釋它相對於某事,但在這裏並不清楚這是什麼東西。

使用其他parse方法之一(例如parse(File)parse(InputStream))可以獲得更可靠的結果。在每種情況下,您要求解析的內容都沒有歧義。

如果您決定先構建一個File對象(稍後傳遞給parse),那麼確保該文件存在(使用File.exists()等)的問題更容易處理。如果你不能得到那麼多,那麼你的問題不是DocumentBuilder或DOM,它是基本的文件路徑。請記住,如果您使用相對文件路徑(例如new File("resources/majors_xml_db.xml")),那麼這將相對於進程的工作目錄進行解析。如果它工作與否取決於你如何啓動你的程序。

+0

我嘗試使用File f = new File("resources/majors_xml_db.xml"製作File對象。但是,我遇到了和以前一樣的問題。我想我不明白的是如何正確格式化URI字符串。 我的文件位於我的MacBook Pro上的目錄中:/ Eclipse/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml 在Eclipse中,我在「src」目錄下創建了一個目錄「resources」我的項目。我將「majors_xml_db.xml」文件放在「resources」文件中。 我不明白如何創建一個文件。請幫忙。謝謝。 – ericso 2010-04-04 23:06:32

+0

@thechiman:見編輯答案 – skaffman 2010-04-04 23:53:33

+0

謝謝,我會試試看。 – ericso 2010-04-05 03:28:29