[英]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.