在Java中使用文件路径的最佳实践

时间:2011-10-13 23:16:03

标签: java configuration path configuration-files

我正在尝试加载属性文件来创建配置。即foo.properties。

存储此配置文件的最佳位置。在我将使用初始化使用类的包中?在src的根级别?

此外,在访问文件时,我使用文件系统中文件的位置:ie:c:\ configs \ foo.properties。

这有更好的做法吗?比如使用相对于项目的路径而不是文件系统位置?如果是,我如何在项目树中引用属性文件的位置。如:

src/
   /com.foo.bar
   /com.foo.car
   /com.foo.zar
   foo.properties

假设我想将属性文件读取到内存中,如何在不使用操作系统位置/或文件系统中的位置的情况下访问此foo.properties。

3 个答案:

答案 0 :(得分:2)

我一直看到的方法是将属性文件放在src / main / resources中,然后使用getResourceAsStream()访问它。

这是一个很好的问题:Load a resource contained in a jar

答案 1 :(得分:0)

我认为位置真的取决于你的项目。我通常喜欢使用特定的文件夹来存储配置文件。

至于你访问文件的方式,使用绝对路径是一个非常糟糕的想法:想象一下你想要将你的应用程序分发为Jar,将它部署在Web服务器上,或者简单地将它移动到另一个地方!

看看:

http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#getResourceAsStream-java.lang.String-

如果你的类路径中有属性文件(例如,作为源代码的一部分),那么你可以以相同的方式加载它,而不管你在哪里(甚至在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");