Java 读取要分析的.xml文件时FileNotFoundException

Java 读取要分析的.xml文件时FileNotFoundException,java,xml-parsing,filenotfoundexception,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.Fi

我正在用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)
...
我不明白为什么当文件存在时我会得到FileNotFoundException。感谢您的帮助。

使用,参数被解释为URI,在本例中,它将是一个相对URI(您提供的字符串不是“完整”URI)。在这一点上,它相对于什么有点模棱两可,没有关于设置的进一步信息。运行时会将其解释为相对于某个对象,但这里不清楚该对象是什么

通过使用其他
parse
方法之一,例如或,您将获得更可靠的结果。在每种情况下,对于您要求它解析的内容,都没有歧义


如果您决定先构造一个
文件
对象(稍后传递到
解析
),那么您将面临一个更易于管理的问题,即确保该文件存在(使用
File.exists()
等等)。如果你做不到这一点,那么你的问题不在于
DocumentBuilder
或DOM,而在于基本的文件路径。请记住,如果使用相对文件路径(例如
新文件(“resources/majors\u xml\u db.xml”)
),则这将相对于流程的工作目录进行解析。它是否有效取决于您如何启动程序。

这可能不是问题,但我想我会注意到,在您的描述中,您将文件夹称为“资源”,在代码中称为“资源”。在具有区分大小写路径的操作系统上,这可能会导致问题。大写是一个输入错误。这两个地方都是“资源”。你试过使用这个指令吗?System.getProperty(“user.dir”)我尝试使用
File f=new File(“resources/majors\u xml\u db.xml”创建一个File对象
。但是,我遇到了与以前相同的问题。我想我不明白的是如何正确格式化URI字符串。我的文件位于MacBook Pro上的一个目录中:/Users/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors\u xml\u db.xml在Eclipse中,我在“src”下创建了一个目录“resources”我的项目目录。我将“majors_xml_db.xml”文件放在“resources”文件中。我不知道如何创建文件。请帮助。谢谢。我切换到PC机并尝试在那里编译程序。我将文件路径字符串替换为“C:/Users/Eric So/my Dropbox/introcs/PSU SOC Crawler/src/resources/majors_xml_db.xml”它成功了!但是,这与我的本地文件结构有关。我将文件放入Eclipse。有没有办法让它使用相对文件路径“resources/majors\u xml\u db.xml”找到文件?谢谢。@thechiman:是的,您需要以
C:/Users/Eric So/My Dropbox/introcs/PSU SOC Crawler/src
作为工作目录来执行程序。
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();
    }
}