繁体   English   中英

什么时候使用“getResourceAsStream”方法?

[英]When to use "getResourceAsStream" method?

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

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

很少有人在使用..

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

什么时候用哪一个?

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

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

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

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

如果您100%确定文件位置不会在不同环境中发生变化,则可以使用第一种方法。 这意味着有一个操作可以确保在所有环境中创建这些目录路径。 另一方面,您可以灵活地更新属性文件而无需打开jar。

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

所以,它主要取决于你的用例。

从Jar读取文件时。 请使用classloader的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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM