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