部署项目时如何更改文件的相对路径

时间:2018-07-26 20:33:41

标签: java netbeans deployment filepath executable-jar

这是我的项目结构:

enter image description here

enter image description here

当我在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文件之后,我得到了以下错误:

enter image description here

问题是,当我执行jar文件时,它将尝试以“ dist”顺序而不是实际文件夹加载文件。如何在执行jar文件时访问dist命令中的文件以访问文件?

1 个答案:

答案 0 :(得分:0)

./src/Vorlagen/OpenScenario/OS_TemplateVTD.xosc是从当前文件夹开始的相对路径。并且因为您是在Netbeans中启动项目的,所以当前文件夹是项目的根文件夹。

所以有几种选择:

  1. 将该文件打包为jar作为类路径资源

    InputStream in = this.getClass().getResourceAsStream("/" + filename);
    Document document = documentBuilder.parse(in);
    
  2. 设置一个具有文件完整路径的属性(将其命名为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