Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部署项目时如何更改文件的相对路径_Java_Netbeans_Deployment_Filepath_Executable Jar - Fatal编程技术网

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

Java 部署项目时如何更改文件的相对路径,java,netbeans,deployment,filepath,executable-jar,Java,Netbeans,Deployment,Filepath,Executable Jar,这是我的项目结构: 在netbeans中执行程序时,我使用以下路径加载xosc文件: XMLReaderWriter.getXMLDocument("./src/Vorlagen/OpenScenario/OS_TemplateVTD.xosc"); 这是我的XMLReaderWriter中的函数: public static Document getXMLDocument(String absoluteFileName) throws Exception { DocumentBu

这是我的项目结构:

在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 order中部署文件以访问文件?

/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的标准布局对齐()


    如果将文件放入
    src\main\resources
    中,它将自动打包到jar中。以及相对于
    src\main\resources
    应该使用的文件的路径。比如,如果您使用
    src\main\resources\vorlagen\openScenario\OS_TemplateVTD.xosc
    ,那么在java代码中,您需要使用
    vorlagen\openScenario\OS_TemplateVTD.xosc

    什么是XMLReaderWriter?那是你写的课吗?如果是,请编辑您的问题并显示getXMLDocument方法的源。@VGR yes我更新了问题如何将文件作为类路径资源打包到jar中。由于“getResourceAsStream”方法找不到我的文件,因此inputstream的值为null