5

我对使用上述方法感到困惑,因为在加载一些属性文件时,人们正在遵循不同的方法......

Properties prop 
 = new Properties(new FileInputStream(new File("<path of the properties file>"));

很少有人在使用..

Properties prop 
 = new Properties(getClass().getResourceAsStream("<path of the properties file>"));

什么时候用哪一个?

4

4 回答 4

11

getResourceAsStream在类路径中搜索给定的文件/资源​​,它还可以InputStreams从 JAR 中提供资源。

因此,如果您的属性存在于物理文件系统中的某个文件夹中(例如用户文件夹,...)FileInputStream,并且如果文件嵌入在您的类路径中(例如作为 JAR 中的资源),请使用getResourceAsStream.

于 2012-04-20T13:31:15.197 回答
2

文件系统读取文件时,使用使用相对或绝对路径的 FileInputStream(File())。

当您的程序作为 jar 分发并且您需要加载该 jar 中的文件时,您需要使用 getResourceAsStream(),它将在类路径中搜索文件,并且路径是相对于类路径的。

于 2012-04-20T13:35:34.137 回答
0

如果您 100% 确定文件位置不会跨环境更改,则可以使用第一种方法。这意味着有一项操作可以确保在所有环境中创建这些目录路径。另一方面,您可以在不打开 jar 的情况下灵活地更新属性文件。

当您从类路径中读取时,第二种方法非常便携。但它的缺点是每次属性更新都要重新捆绑 jar 文件。

因此,它基本上取决于您的用例。

于 2012-04-20T13:31:12.357 回答
-1

当您从 Jar 中读取文件时。请使用类加载器的 getResource 或 getResoureAsstream。找到以下代码片段以从 Jar 中读取文件。上述方法无法从 jar 中读取文件。

    InputStream in = this.getClass().getClassLoader()
            .getResourceAsStream("com/net/resources/config.properties");

    InputStream is = Thread.currentThread().getContextClassLoader()
            .getResourceAsStream("com/net/resources/config.properties");

    URL url = this.getClass().getClassLoader()
            .getResource("com/net/resources/config.properties");
于 2016-06-15T13:58:59.707 回答