[英]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.