获取属性文件的绝对路径

时间:2012-11-22 03:00:52

标签: java path

我的Java EE应用程序包含许多子项目,这些子项目应使用单个配置文件连接到数据库。我打算编写一个Java类,并使其成为一个独立的jar来读取datasource.xml中的数据库连接参数,这些参数将放在独立jar的路径上。

我想问的问题:

  1. 如何动态获取datasource.xml的绝对路径?
  2. 第一个问题的解决方案能否适用于所有操作系统,如UNIX等?

3 个答案:

答案 0 :(得分:2)

您必须处理的第一个主题是存储该文件的位置。

根据您的问题,您将在文件系统的某处将文件存储在实际应用程序包的外部。因此,您绝对必须知道文件在文件系统中的真正位置才能访问它;除非您使用环境变量来指示文件所在的代码,否则您无法事先得出结论。

更好的方法是使用JAR打包XML文件。然后,您不必再担心绝对路径了。只需使用Thread.currentThread().getContextClassLoader().getResource(),提供资源的包式路径,您就可以在任何地方找到它的引用。

如果无法将文件与JAR一起打包,则可以将其存储在文件系统的目录中,并将该目录添加到服务器的类路径查找序列中;一些应用服务器支持它。然后,您仍然可以使用类加载器来查找资源,而无需知道其绝对位置。

答案 1 :(得分:0)

这个怎么样?在运行时将相对路径转换为绝对路径。我想这应该适用于所有环境......

File a = new File("/some/abs/path");
File parentFolder = new File(a.getParent());
File b = new File(parentFolder, "../some/relative/path");
String absolute = b.getCanonicalPath(); // may throw IOException

问候

答案 2 :(得分:0)

您可以使用环境变量

String path = System.getEnv("MYVARIABLE");
File datasource = path + "/datasource.xml";

或者从位于常量位置的属性文件中读取位置

Properties props = new Properties();
try {
    props.load("MyFixed.properties");
} catch(Exception e) {
    e.printStackTrace(); // Can do better
}
String path = props.getProperty("datasource.path");
File datasource = path + "/datasource.xml";

或者在使用-D

启动Jar时传入VM参数
String path = System.getProperty("datasource.path");
File datasource = path + "/datasource.xml";

并致电

java -jar -Ddatasource.path=/my/path/to/datasource.xml my.jar