我正在尝试加载属性文件来创建配置。即foo.properties。
存储此配置文件的最佳位置。在我将使用初始化使用类的包中?在src的根级别?
此外,在访问文件时,我使用文件系统中文件的位置:ie:c:\ configs \ foo.properties。
这有更好的做法吗?比如使用相对于项目的路径而不是文件系统位置?如果是,我如何在项目树中引用属性文件的位置。如:
src/
/com.foo.bar
/com.foo.car
/com.foo.zar
foo.properties
假设我想将属性文件读取到内存中,如何在不使用操作系统位置/或文件系统中的位置的情况下访问此foo.properties。
答案 0 :(得分:2)
我一直看到的方法是将属性文件放在src / main / resources中,然后使用getResourceAsStream()访问它。
这是一个很好的问题:Load a resource contained in a jar
答案 1 :(得分:0)
我认为位置真的取决于你的项目。我通常喜欢使用特定的文件夹来存储配置文件。
至于你访问文件的方式,使用绝对路径是一个非常糟糕的想法:想象一下你想要将你的应用程序分发为Jar,将它部署在Web服务器上,或者简单地将它移动到另一个地方!
看看:
如果你的类路径中有属性文件(例如,作为源代码的一部分),那么你可以以相同的方式加载它,而不管你在哪里(甚至在jar中)。
答案 2 :(得分:0)
如果你想保留一些接近当前结构的东西,你可以添加一个resources
文件夹,如下所示:
src/
/com.foo.bar
/com.foo.car
/com.foo.zar
resources
/foo.properties
但我强烈建议遵循Maven目录结构,它们确实为您提供了很大的灵活性:
src/
/main
/java
/com.foo.bar
/com.foo.car
/com.foo.zar
/resources
/foo.properties
无论你使用什么布局,我都建议将你的资源放在与你的一个Java包匹配的文件夹结构中,这样你就可以轻松地将它们作为资源加载,避免你的绝对vs相对文件路径难题。像这样:
src/
/resources/
/com/foo/bar/foo.properties
给定一个com.foo.bar.MyClass类,您可以这样做:
InputStream is = MyClass. getResourceAsStream("com/foo/bar/foo.properties");