读取.xml文件进行解析时出现FileNotFoundException

时间:2010-04-04 22:09:38

标签: java xml-parsing filenotfoundexception

我正在用Java编写一个程序,我从XML文件中读取数据并解析它。该文件将导入到项目的src目录中名为“Resources”的文件夹中。我正在使用Eclipse。当我运行程序时,我收到以下错误:

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 个答案:

答案 0 :(得分: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")),那么这将相对于流程的工作目录进行解析。如果它的工作与否取决于你如何启动你的程序。