无法将saxParser指向文件目录

时间:2013-06-27 22:06:19

标签: java xml saxparser

在我的Eclipse项目中,我正在尝试将xml文件解析为字符串列表以显示在jsp文件中。

我的解析器与此代码完美配合:

public class XMLReader{
    public static void main(String [] args){
        System.out.println(getXML());
    }
    public static String getXML(){
        try{
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            XMLHandler handler = new XMLHandler(); // class I created extending DefaultHandler
           saxParser.parse("file.xml",handler);
           urls = handler.getXMLList();
        }
        catch(Exception e){
           e.printStackTrace();
        }
        return urls.toString();
    }
}

根据需要将字符串列表打印到我的控制台。 但是当我尝试重写方法以返回一个字符串,以便我可以在我的jsp文件中使用它时:

public class XMLReader{
    public String returnXML(){
        return getXML().toString();
    }
    public List<String> getXML(){
        ...
    }
}

我收到了java.io.FileNotFoundException。在我的控制台中,它显示Eclipse正在尝试在包含我的eclipse.exe的文件夹中找到该文件,而不是在我的工作区文件夹中。我一直在互联网上搜索几个小时,但我不知道是什么导致在另一个文件夹中查找。我不确定是否使用非静态方法或使用jsp文件导致文件路径发生变化,但我只是遇到了我的saxParser.parse(文件,处理程序)代码行的这个问题,而且我有不知道如何解决它。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

我认为您只需要指定XML文件的完整路径。

如果你正在调用SAXParser.parse(String,DefaultHandler),那么Javadoc说字符串是一个URI,所以对于本地文件,它应该被指定为"file://drive/directory/file.xml",使用正斜杠作为目录分隔符而不管平台

否则,您可以创建一个File实例,它允许您以平台相关的方式指定文件路径(例如,在Windows中使用反斜杠),并调用SAXParser.parse(File,DefaultHandler)

您可能希望动态确定Eclipse工作区文件夹的位置(如果该文件所在的位置)。我不知道该怎么做,但应该有办法。

最后一个建议:命名你的类“XMLReader”可能是一个有点冒险的歧义,因为它有一个具有相同名称的通用接口(org.xml.sax.XMLReader)。