Java 在JAR中封装XML

Java 在JAR中封装XML,java,xml,intellij-idea,Java,Xml,Intellij Idea,我知道这个问题已经出现在互联网上,但我被困在这个过程中 问题是: 我得到了一些需要解析的XML文件(OpenStreetMap–.osm)。我解析这些OSM文件的方法如下:(edit此方法将OSMHandler设置为我的ContentHandler,实际解析在该类中进行) 当您在IntelliJ中运行应用程序时,这很好,但是现在我需要制作一个.jar,它将在简单的双击下运行 据我所知,我们需要将OSM文件作为ressource获取,例如: InputStream is = getClass().

我知道这个问题已经出现在互联网上,但我被困在这个过程中

问题是:

我得到了一些需要解析的XML文件(OpenStreetMap–.osm)。我解析这些OSM文件的方法如下:(edit此方法将OSMHandler设置为我的ContentHandler,实际解析在该类中进行)

当您在IntelliJ中运行应用程序时,这很好,但是现在我需要制作一个.jar,它将在简单的双击下运行

据我所知,我们需要将OSM文件作为ressource获取,例如:

InputStream is = getClass().getResourceAsStream(filename);
我不太清楚如何让我的OSMHandler解析这个InputStream,因为parse方法只接受一个字符串。有人能详细说明一下我们从这里能做些什么吗

编辑

我确实尝试了以下方法:

void parseOSM_jar(String filename){
    InputStream is = getClass().getResourceAsStream(filename);
    try
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(is);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}
这里的问题是,就我而言,它没有调用/设置我的OSMHandler类作为“解析器”

最终编辑

多亏了简单的提示,它现在可以工作了。我只使用InputSource,如下所示:

void parseOSM(String filename) throws ParserConfigurationException {

    InputStream stream = getClass().getResourceAsStream(filename);
    InputSource input = new InputSource(stream);

    try {
        XMLReader reader =
                XMLReaderFactory.createXMLReader();
        reader.setContentHandler(
                new OSMHandler());
        reader.parse(input);
    } catch (SAXException | IOException e) {
        throw new RuntimeException(e);
    }
}

就您使用XMLReader而言,它可以解析InputStream,您的链接不是说InputSource吗?它可以工作!你完全正确。我正在用最后的工作代码块编辑我的文章。谢谢
void parseOSM(String filename) throws ParserConfigurationException {

    InputStream stream = getClass().getResourceAsStream(filename);
    InputSource input = new InputSource(stream);

    try {
        XMLReader reader =
                XMLReaderFactory.createXMLReader();
        reader.setContentHandler(
                new OSMHandler());
        reader.parse(input);
    } catch (SAXException | IOException e) {
        throw new RuntimeException(e);
    }
}