何时使用"getResourceAsStream"方法?

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>"));

何时使用哪一个?


2
可能是getResourceAsStream() vs FileInputStream的重复问题。 - Anonymous
小错误-少了一个右括号。 - fijiaaron
4个回答

11

getResourceAsStream会在类路径中搜索指定的文件或资源,它还可以提供来自JAR内部资源的InputStreams

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


2

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

当您的程序被打包成jar文件并且需要加载该jar文件内部的文件时,您需要使用getResourceAsStream(),它会在类路径中搜索该文件,并且路径是相对于类路径的。


0

如果您可以百分之百确定文件位置在所有环境中都不会更改,那么您可以使用第一种方法。这意味着需要进行操作以确保在所有环境中创建这些目录路径。另一方面,您可以灵活地更新属性文件而无需打开jar文件。

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

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


-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");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接