这是我的项目结构:
当我在netbeans中执行程序时,我使用以下路径加载xosc文件:
XMLReaderWriter.getXMLDocument("./src/Vorlagen/OpenScenario/OS_TemplateVTD.xosc");
这是我的XMLReaderWriter中的函数:
public static Document getXMLDocument(String absoluteFileName) throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(new File(absoluteFileName)); //parse odr file into document
return document;
}
它有效,因为我在项目内部工作。但是在部署项目并执行jar文件之后,我得到了以下错误:
问题是,当我执行jar文件时,它将尝试以“ dist”顺序而不是实际文件夹加载文件。如何在执行jar文件时访问dist命令中的文件以访问文件?
答案 0 :(得分:0)
./src/Vorlagen/OpenScenario/OS_TemplateVTD.xosc
是从当前文件夹开始的相对路径。并且因为您是在Netbeans中启动项目的,所以当前文件夹是项目的根文件夹。
所以有几种选择:
将该文件打包为jar作为类路径资源
InputStream in = this.getClass().getResourceAsStream("/" + filename);
Document document = documentBuilder.parse(in);
设置一个具有文件完整路径的属性(将其命名为pathToConfig
),以-DpathToConfig=/full/path/to/file
开头的Java,然后在Java中使用该属性的值
String filename = System.getProperty("pathToConfig");
如果使用Maven,最好将目录结构与Maven的标准布局(https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html)对齐
如果将文件放入src\main\resources
,它将自动打包在jar中。以及相对于src\main\resources
应该使用的文件路径。就像如果您使用src\main\resources\vorlagen\openScenario\OS_TemplateVTD.xosc
,那么在您的Java代码中,您需要使用vorlagen\openScenario\OS_TemplateVTD.xosc