簡體   English   中英

在JAVA中從JAR運行時如何獲取定位文件的文件路徑?

[英]How to get filepath of the located file when ran from JAR in JAVA?

我的項目具有以下結構:

src/test/resources/utility/configuration.xml

我正在嘗試使用 ClassLoader 獲取系統中的文件位置

public File getFileFromResources(String fileName){

        ClassLoader classLoader = getClass().getClassLoader();

        URL resource = classLoader.getResource(fileName);
        if(resource == null){
            throw new IllegalArgumentException("file not found");
        }else{
            return new File(resource.getFile());
        }

調用方式:

File file = getFileFromResources("Utility/ConfigurationXML.xml");
strFilePath = file.getAbsolutePath();

這給了我文件的絕對路徑,它在目標文件夾中。

上面的代碼在 Eclipse IDE 中工作正常,但是當我創建項目 JAR 時, getFileFromResources()返回我

file:/C:/Users/UserName/Desktop/ExecutableJAR/TestJAR-tests.jar!/Utility/ConfigurationXML.xml

我正在使用 Maven 來構建我的項目。

正如您的路徑所示,資源是您測試資源的一部分。 生產代碼無法訪問測試資源(而測試代碼可以訪問生產資源)。 如果您在生產中需要此特定資源,則需要將其移動到您的生產資源文件夾層次結構(通常為src/main/resources/utility/configuration.xml

測試資源(和類)不包含在 JAR 文件中,因為它被視為生產代碼。

正如@Nicktar所說,“生產代碼無法訪問測試資源”

在稱為資源的根級別沒有任何標准。

src/main/resources 通常是您放置應該移動到正常包層次結構中的非 Java 工件的地方,例如作為類路徑資源加載的 XML 配置文件。

我在使用 netbeans 時遇到了同樣的問題(它確實從命令行java -jar jarname.jar 工作
我最終將資源文件放在項目根目錄的文件夾中,然后在構建 jar 后將該文件夾移動到與 jar 文件相同的位置。
它工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM