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