相对路径:无法选择正确的相对路径来访问配置文件

时间:2015-05-22 09:15:00

标签: java io filesystems relative-path

我的项目结构如下:

  

MyModule - >类 - > SerPkg ---> myclass.class

     

MyModule - > src - > config ---> config.properties

     

MyModule - > src - > SerPkg ---> myclass.java

我正在尝试使用以下代码访问此处的config.properties文件,但我发现找不到文件异常。

InputStream in = new FileInputStream("../../src/config/config.properties");

我尝试了下面的代码来找出当前的Dir,我发现具有类文件的classes文件夹是当前文件夹。我试过以下事情:

 String current = new java.io.File( "." ).getCanonicalPath();
 System.out.println("Current dir:"+current);
 String currentDir = System.getProperty("user.dir");
 System.out.println("Current dir using System:" +currentDir);
 System.out.println("Working Directory = " +
                    System.getProperty("user.dir")); 

  // all above cmds give "MyModule" as current dir
         System.out.println("Path:"+this.getClass().getClassLoader().getResource("").getPath());  

// above last cmd gives "classes" as current dir

我无法从类文件夹或MyModule文件夹中访问config.properties文件作为当前目录。

1 个答案:

答案 0 :(得分:0)

您有两个选择:

<强> 1。只读属性

如果这些是用户无法修改的某些内部属性,请使用此方法。这可能还包括用户应该能够修改的属性的默认值。

将这些属性文件打包在JAR中(Maven通常位于src / main / resources下的某个位置)并使用MyClass.class.getResourceAsStream(...)

之类的方式访问它们

<强> 2。用户在部署后应该能够配置的属性

打包应用程序时,必须将这些配置文件与JAR文件一起打包。因此,文件很可能不在&#34; src&#34;目录了。您可能必须找出主JAR所在的位置,以创建已部署配置文件的绝对路径。 使用Maven,您可以使用copy-resources goal of the Maven Resources Plugin在主项目中生成适当的布局,例如用于打包应用程序的Maven Assmbly插件。