2010-04-04 23 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