这对我来说可能是非常愚蠢的,但我已经和它斗争了一个小时。
鉴于这些类,所有这些类都在同一个包中:
由于类和XML在同一个包中,我没想到要找到XML文件。不幸的是,最好的计划经常出错。
private static Map<String, Object> parseCatalogXml(String catalogName) {
SAXParserFactory factory = SAXParserFactory.newInstance();
CatalogHandler handler = new CatalogHandler();
try {
SAXParser parser = factory.newSAXParser();
File file = new File(catalogName + ".xml");
if (!file.exists()) {
throw new IllegalStateException("Unable to find file: " + file.getName());
}
parser.parse(file, handler);
} catch (SAXException ex) {
} catch (ParserConfigurationException ex) {
} catch (IOException ex) {
}
return handler.getConfigMap();
}
使用新文件(“”)。getAbsolutePath()无法在IDE中使用,也无法在命令行上使用maven。
答案 0 :(得分:1)
我认为这是一个类路径/工作目录问题@Jason。即使您的文件“全部在同一个包中”,也不意味着Java正在该目录中运行。
您最可能需要做的是将XML文件移动到另一个“源文件夹”(Eclipse语言)。在我的项目中,我有我的来源:
src/main/java
以及我的XML和其他配置文件:
src/main/resources
然后,您可以在类路径的顶部找到XML文件,例如:
ClassLoader.getSystemResourceAsStream(catalogName + ".xml");
答案 1 :(得分:0)
当您加载这样的hd.xml时,该文件需要位于您启动程序所在的同一目录中。
这意味着,在/ home / user /中调用java,然后hd.xml需要位于/home/user/hd.xml中。
答案 2 :(得分:0)
只需执行new File("file.txt");
将在工作目录(启动该程序的目录)中查找文件。
答案 3 :(得分:0)
尝试使用以下文件获取文件:
new File(getClass().getResource("/"+catalogName + ".xml").getPath());
答案 4 :(得分:0)
如果hd.xml包含了您的程序,您应该阅读Class.getResource()。