我正在使用maven开发桌面java应用程序。 我有一个* .properties文件,我需要在执行期间检索(src / resources / application.properties)。 我唯一想到的就是使用:
private Properties applicationProperties;
applicationProperties.load(new BufferedInputStream(new FileInputStream("src/resources/application.properties")));
如果我直接从IDE运行我的应用程序,这将有效。 我想保持outpout层次结构清晰,所以我设置maven将资源文件夹dircetly复制到目标文件夹(这是输出应用程序的基础)。这样就不会加载application.properties文件(因为我有target / resources / application.properties但不是target / src / resources / application.properties)。
管理资源的最佳方法是什么,以便在我从IDE调试并直接运行构建的jar文件时它们都可以工作?
答案 0 :(得分:1)
不要指望文件位于src
文件夹中 - 它在运行时不存在。属性文件转到/bin
。但也不要依赖它。因为FileInputStream
仅采用绝对路径。
如果需要类路径相对路径,请使用:
InputStream is = YourClass.class.getResourceAsStream("/a.properties")`
(maven将文件从/src/main/resources
发送到类路径的根目录)
答案 1 :(得分:1)
您应该从类路径加载属性文件,而不是从显式文件系统位置加载:
applicationProperties.load(new BufferedInputStream(this.getClass().getResourceAsStream( "/application.properties" );
只要您的IDE配置为在类路径中包含resources目录(这应该是Maven的默认目录),那么无论您是否在IDE中运行,这都将有效,因为maven会将资源复制到打包档案时的正确位置。