Java 使用Spring创建与jar相关的文件

Java 使用Spring创建与jar相关的文件,java,spring,file,Java,Spring,File,我在一个Java控制台应用程序上工作。my application.properties文件中有一个属性,它包含另一个文件名作为属性值,如 my.file.location=file:myDir/myFileName 在代码中,我尝试获得如下文件: @Value("${my.file.location}") private File myfileLocation; 如果我从包含jar文件的目录启动应用程序,该文件将被解析,但当我从其他位置运行应用程序时,该文件位置无效 我不能将此文件放在类路

我在一个Java控制台应用程序上工作。my application.properties文件中有一个属性,它包含另一个文件名作为属性值,如

my.file.location=file:myDir/myFileName
在代码中,我尝试获得如下文件:

@Value("${my.file.location}")
private File myfileLocation;
如果我从包含jar文件的目录启动应用程序,该文件将被解析,但当我从其他位置运行应用程序时,该文件位置无效

我不能将此文件放在类路径上,它必须位于jar文件的外部


如何使文件路径相对于我的jar文件而不是当前工作目录?

我相信这与Spring无关,对吗?您只需要加载应用程序中的配置文件,并将其解压缩,以便用户可以修改它,好吗

首先,您可以尝试始终设置工作目录,我认为这是更“标准”的解决方案。在windows中,您可以创建一个链接,指定起始位置,并包含指向
jar
文件的路径(或
bat
cmd
,无论什么)

如果您坚持使用jar路径,您可以使用解决方案。注意,jar必须从文件系统加载:

URI path = MySpringBean.class.getProtectionDomain().getCodeSource().getLocation().toURI();
File myfileLocation = new File(new File(path).getParent(), "/myDir/jdbc.properties");

谢谢你提供的答案。我想知道,如何使用相对于jar文件的@Value(${my.file.location}),所以这个问题实际上与Spring有关。您可以调用
myfileLocation.getPath()
来获取相对路径,但是您仍然需要创建具有完整路径的新
file
。如果需要的话,可以完全使用spring来实现。