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

eri*_*cso 5 java filenotfoundexception xml-parsing

我正在用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)
...
Run Code Online (Sandbox Code Playgroud)

相关代码在这里:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我在文件存在时收到FileNotFoundException.谢谢您的帮助.

ska*_*man 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")),那么这将相对于流程的工作目录进行解析.如果它的工作与否取决于你如何启动你的程序.