【问题标题】:Relative path: Unable to select correct relative path for accessing a config file相对路径:无法选择正确的相对路径来访问配置文件
【发布时间】:2015-05-22 09:14:59
【问题描述】:

我的项目结构如下:

MyModule ->classes-->SerPkg--->myclass.class

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

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

我正在尝试使用以下代码在此处访问 config.properties 文件,但我收到 File not found 异常。

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

我尝试了下面的代码来找出当前目录,我发现包含类文件的类文件夹是当前文件夹。我尝试了以下事情:

 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 文件。

【问题讨论】:

  • 你为什么不直接访问它作为类路径资源?
  • 可能是new FileInputStream("../src/config/config.properties");?如果你在classes,那么你应该只上一个文件夹。
  • @TagirValeev ..试过这没用
  • @fge ...怎么做,我正在使用 Intellij
  • 旁注:我强烈建议至少使用 Maven 项目布局(src/main/java, src/main/resources,...),如果你不是,也考虑使用 Maven已经在使用了。

标签: java io filesystems relative-path


【解决方案1】:

你有两个选择:

1.只读属性

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

将这些属性文件打包到 JAR 中(Maven 通常位于 src/main/resources 下的某个位置)并使用类似 MyClass.class.getResourceAsStream(...) 的方式访问它们

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

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

【讨论】:

  • 关于选项2,我正在从类文件夹中的类文件访问,因此路径 - ../../config/confog.properties 应该可以工作......但它没有...... . 是的,我将更改项目结构的格式..tx ...我使用 ant 虽然....
  • 是的,相对路径可能不适用于所有场景。如果我没记错的话,相对路径是相对于您当前的工作目录的,这可能会根据您启动应用程序的方式而改变。在 IDE 中,当前目录可能是项目根目录,因此您必须使用“src/config/config.properties”。但是,一旦部署了您的应用程序,这当然不会起作用。请参阅我的更新答案。
猜你喜欢
  • 2023-03-04
  • 2020-05-18
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多